当前位置: 首页 > 知识库问答 >
问题:

azure函数:从http请求设置blob文件名

王棋
2023-03-14

我正在尝试设置一个 azure 函数,以将 Blob 从 HTTP 请求上传到 blob。

我能够使用以下内容上传具有静态文件名的文件:

public static class Uploader
{
    [FunctionName("Uploader")]
    public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequest req,
    [Blob("hello/uploaded.jpg", FileAccess.Write)]Stream writer,
    TraceWriter log
    )
        {
            log.Info("trigger for image upload started...");
            if (!req.ContentType.Contains("multipart/form-data") || (req.Form.Files?.Count ?? 0) == 0)
            {
                log.Warning("no images found on upload attempt");
                return new BadRequestResult();
            }
            foreach (var file in req.Form.Files)
                file.CopyTo(writer.);

            return new OkObjectResult("Done!");
        }
}

是否有任何方法可以将<code>Blob(“hello/upload.jpg”)以动态获取HTTP请求的名称。我不介意它是否位于头部或身体的任何位置。我试图不将整个<code>GetBlockBlobReference过程仅用于动态文件名。

更新 我不确定我是否错过了某些内容或以错误的方式查看此问题。对于使用 Blob 存储进行无服务器设置,HTTP 上传难道不应该是一个明显且常见的方案吗?为什么没有任何例子呢?

共有2个答案

锺霍英
2023-03-14

下面是一个同时包含HttpRequestMessage和POCO绑定的示例:

[FunctionName("Uploader")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] Info input, HttpRequest req,
[Blob("hello/{FileName}", FileAccess.Write)]Stream writer,
TraceWriter log
)
{
   //...
}

public class Info
{
   public string FileName { get; set; }
   //...
}

更新:

以下代码片段显示了一个使用扩展HttpTrigger绑定数据支持的示例,该数据支持具有众所周知的属性,如标题和查询,更多详细信息请参见:

[FunctionName("Uploader")]
public static IActionResult Run(
  [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)HtpRequest req,
  [Blob("hello/{query.filename}", FileAccess.Write)] Stream writer,
  // [Blob("hello/{headers.filename}", FileAccess.Write)] Stream writer,
  TraceWriter log)
{
   //...
}

网址示例:
http://localhost:7071/api/Uploader?filename=uploaded.jpg

翟永春
2023-03-14

@RomanKiss建议的选项应该有效。或者,如果需要,可以将文件名放入函数 URL 模板中:

[FunctionName("Uploader")]
public static IActionResult Run(
  [HttpTrigger(AuthorizationLevel.Function, "post", Route = "uploader/{filename}")] 
  HttpRequest req,
  string filename,
  [Blob("hello/{filename}", FileAccess.Write)] Stream writer,
  TraceWriter log)
{
   //...
}
 类似资料:
  • 我在Azure (blob)存储上读取Blob中存储的文本时遇到问题。 blob只包含单行文本(字符串)。blob通过Azure Functions HttpTrigger (C#)填充文本,HttpTrigger通过POST接收文本,并用用户指定的名称将文本保存到blob中。保存blob时,名称全部转换为小写。 然后,用户可以访问一个简单的超文本标记语言网页,并在表单中输入blob的名称。当用户

  • 我想利用AZURE Function应用程序从AZURE BLOB存储中读取XLSX文件。该函数应由REST API调用来调用。我可以访问blob并下载文件,但我很难用pandas直接读取文件内容。我找了几个小时,但是找不到解决办法。我的最新方法是这样的: 在MS homepage*上,有一个从blob下载文件并随后进行处理的例子,但由于我使用的是功能应用程序,如果我没有遗漏任何内容,那么首先下载

  • 我试图通过Azure功能从Azure Blob存储中获取文件并在浏览器中显示它们。当我导航到url时,我可以设法下载文件,但我无法在浏览器中将它们显示为静态文件/图像。 我只想在浏览器中显示,而不是下载。 我尝试了一些sdk命令,但没有成功。以下是我尝试过的: 任何想法将不胜感激。谢谢!

  • 问题内容: 基本上,我在这里尝试做的是检索图像并将其转换为base64。 通过阅读此处的评论,它指出: “当然。在将资源作为ArrayBuffer提取后,从中创建一个blob。一旦有了它,就可以直接对base / blob 或进行base64编码 。” 但是,只是,而我需要从图像中获取二进制文件,以便可以将其转换为base64并使用数据将其显示在img标签中。 有人知道如何实现这一目标吗? 先感谢

  • 我有Node.js应用程序,前端在Angular中,我需要上传和下载文件到Azure Blob/Azure存储 我已经按照这里给出的说明进行了操作:https://github.com/azure/azure-sdk-for-js/blob/master/sdk/storage/storage-blob/samples/typescript/src/basic.ts 下面是我的代码,它列出了BLO

  • 我正在尝试创建一个Azure函数,它连接到一个非硬编码的容器,就像我的连接一样。 connection属性能够直接从local.settings.json获取连接值。该功能似乎不是“container-name”的选项,或者如果是,也不是附加的/ftp/{name}的选项。 那么,有没有办法根据Azure Function Blob触发器的设置来设置容器名称呢?