【问题标题】:azure function: set blob filename from http request天蓝色函数:从 http 请求设置 blob 文件名
【发布时间】:2018-09-01 13:52:18
【问题描述】:

我正在尝试设置一个 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!");
        }
}

有什么办法可以将Blob("hello/uploaded.jpg") 更改为Blob("hello/{fileName}" 之类的东西,以动态获取HTTP 请求的名称。我不介意它是从头部还是身体的任何地方。我试图不将整个 GetBlockBlobReference 进程仅用于动态文件名。

更新 我不确定我是否遗漏了什么或以错误的方式看待这个问题。对于带有 blob 存储的无服务器设置,HTTP 上传不应该是一个明显和常见的场景吗?怎么没有这方面的例子?

【问题讨论】:

标签: azure azure-blob-storage azure-functions


【解决方案1】:

@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)
{
   //...
}

【讨论】:

    【解决方案2】:

    以下是一个同时具有 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; }
       //...
    }
    

    更新:

    以下 sn-p 显示了一个使用扩展 HttpTrigger 绑定数据支持的示例,该支持具有众所周知的属性,例如 headersquery,更多详细信息 here

    [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

    【讨论】:

    • 这不适用于HttpRequest reqreq 也需要 HTTP 触发器
    • 我也刚刚注意到文件名需要是一个获取参数
    • @NevilleNazerane,我刚刚尝试过,对我来说效果很好。您使用的是哪个版本的函数 sdk?
    • SDK 为 1.0.6。我现在正在尝试 1.0.10
    • @Thomas 也尝试了 10 次,同样的问题。什么对你有效?
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2018-07-15
    相关资源
    最近更新 更多