C# 通过Restful API从云下载大型文件的最佳实践
我正在尝试构建一个Restful API,以便用户通过我的API从云存储下载zip文件 这样做的原因:C# 通过Restful API从云下载大型文件的最佳实践,c#,azure,rest,api,cloud,C#,Azure,Rest,Api,Cloud,我正在尝试构建一个Restful API,以便用户通过我的API从云存储下载zip文件 这样做的原因: 防止直接访问我们的内部云存储 隐藏正在使用的技术(存储品牌等) 控制用户请求(记录、验证) 在我的APi上应该有两种方法来实现这一点: 下载为字节[]并返回 下载为临时文件,读取为字节[]并返回 这两种方式都需要将文件下载到内存或tempfile中,等待文件传输完成(等待用户下载完成或仅发送到HTTP??),然后释放内存或删除temp文件 如果一个文件的大小是2GB(让我们假设这对于服务器来说
杰米是的,做你需要的事情的一个更好的方法是:
私有blob
中SAS
令牌,并仅返回文件的SAS URL
作为响应。SAS令牌的有效性可能因您的需求而异,但最好将其保持在最低限度嗨,比特,谢谢你的回答。你介意告诉我,如果用户下载的文件在你的本地驱动器上,并且非常大,无法读入内存,你会怎么做。这实际上是另一个问题,但是,我会使用并且已经使用
MultipartStreamProvider
将其直接上载到Blob存储。您应该使用Streams,而不是在内存中下载整个内容。@Junnas谢谢您的评论,我认为我的概念是错误的,在服务器端下载整个内容,你知道我可以从中学习到什么具体的例子吗?这里有一个你也可以很容易地找到C#streams的教程:)
public static byte[] GetReportFile(GetReportRequest request, string refId)
{
//C# byte limit is 2GB
byte[] file = null;
try
{
var report = ReportDao.GetReport(request.ReportId);
var tempFilePath = new StorageService().DownloadByUriToTempFile(report.CloudPath);
}
catch (Exception ex)
{
}
return file;
}