使用Azure上托管的ASP.NET Core Web应用程序将文件上传到目录

时间:2018-12-19 18:30:41

标签: c# azure asp.net-core asp.net-core-mvc asp.net-core-2.2

我正在将Azure App Service与Azure SQL数据库一起使用来托管ASP.NET Core Web应用程序。

此应用程序涉及将文档上传到目录。在我的本地开发机器上,我只是使用:

var fileUploadDir = $"C:\\FileUploads";

在Azure上,我将使用以下什么功能来创建目录结构并将文件放置在目录结构中:

var filePath = Path.Combine(fileUploadDir, formFile.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
     await formFile.CopyToAsync(stream);
}

我将使用哪种Azure功能,是否有用于文件系统操作的API,或者我可以简单地使用Azure目录路径更新现有代码使用的fileUploadDir?

1 个答案:

答案 0 :(得分:2)

使用Azure应用服务,您可以以相同的方式上传文件。您只需要在wwwroot文件夹中创建目录。如果您有多个实例,则根据文档File access across multiple instances中的说明,此文件夹将在它们之间共享 :

  

跨多个实例的文件访问主目录包含一个   应用程序的内容,并且应用程序代码可以对其进行写入。如果应用运行   多个实例,主目录在所有实例之间共享   这样所有实例都可以看到同一目录。因此,例如,如果   应用会将上传的文件保存到主目录,这些文件是   立即可用于所有实例。

尽管如此,根据应用程序的需求,更好的解决方案可能是使用Blob存储来管理文件,尤其是在文件必须保留的情况下。例如,如果您想在上传后使用azure函数触发异步处理,则使用blob也可能很有用。

对于带有临时文件的短时间处理,我使用主目录没有任何问题。一旦处理时间很长,或者如果我想保留文件,则倾向于使用异步处理和Blob存储。

blob存储解决了用户访问主目录中文件的问题,允许依赖于专用于该存储的服务,而不是依赖于与应用程序服务有关的类型文件系统的简单存储。写入,删除很简单,并提供了许多其他可能性:通过REST服务直接访问,通过共享访问签名访问,异步处理...