gpt4 book ai didi

c# - Azure函数: Is there optimal way to upload file without storing it in process memory?

转载 作者:行者123 更新时间:2023-12-02 23:14:40 25 4
gpt4 key购买 nike

我正在尝试通过 HTTP 将文件上传到 blob 容器。

根据请求通过以下方式接收文件:

public class UploadFileFunction
{
//Own created wrapper on BlobContainerClient
private readonly IBlobFileStorageClient _blobFileStorageClient;

public UploadFileFunction(IBlobFileStorageClient blobFileStorageClient)
{
_blobFileStorageClient = blobFileStorageClient;
}

[FunctionName("UploadFile")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "/equipments/{route}")]
HttpRequest request,
[FromRoute] string route)
{
IFormFile file = request.Form.Files["File"];
if (file is null)
{
return new BadRequestResult();
}

string fileNamePath = $"{route}_{request.Query["fileName"]}_{request.Query["fileType"]}";
BlobClient blob = _blobFileStorageClient.Container.GetBlobClient(fileNamePath);

try
{
await blob.UploadAsync(file.OpenReadStream(), new BlobHttpHeaders { ContentType = file.ContentType });
}
catch (Exception)
{
return new ConflictResult();
}

return new OkResult();
}
}

比使用文件发出请求: enter image description here

在 UploadAsync 上,文件的整个流上传到进程内存中 enter image description here

是否存在某种方法可以直接上传到 blob,而无需在进程内存中上传?预先感谢您。

最佳答案

避免这种情况的最佳方法是根本不通过您自己的 HTTP 端点上传文件。询问如何避免上传的数据没有最终出现在进程内存中(通过 HTTP 端点)是没有意义的。

只需使用 Azure Blob Storage REST API直接将此文件上传到 Azure Blob 存储。您自己的 HTTP 端点只需发出 Shared access signature (SAS)文件上传的token,客户端可以将文件直接上传到Blob存储。

此模式应该用于文件上传,除非您有充分的理由不这样做。您的触发器函数仅在 HTTPRunTime 完成 HTTP 请求后才会被调用,因此触发器的 HttpRequest 对象会在进程内存中分配,然后传递给触发器。

我还建议block blobs如果您想分多个阶段上传。

关于c# - Azure函数: Is there optimal way to upload file without storing it in process memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73671161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com