作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过 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();
}
}
在 UploadAsync 上,文件的整个流上传到进程内存中
是否存在某种方法可以直接上传到 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/
我是一名优秀的程序员,十分优秀!