通过 Restful API 从云下载大文件的最佳实践



我正在尝试构建一个 Restful API,供用户通过我的 API 从云存储下载 zip 文件。

这样做的原因:

  1. 防止直接访问我们的内部云存储
  2. 隐藏正在使用的技术(存储品牌等(
  3. 获得对用户请求的控制(日志记录、验证(

在我的APi上应该有两种方法可以做到这一点:

  1. 下载为 Byte[] 并返回

  2. 下载为临时文件并读取为 byte[] 并返回

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;
}

这两种方式都需要将文件下载到内存或临时文件中,等待文件传输完成(等待用户下载完成或仅传递到 HTTP???(,然后释放内存或删除临时文件。

如果文件的大小为 2 GB(假设这对于服务器来说很大(,有没有办法最大限度地减少服务器端的负载,可能是像下载卡盘一样,只保留一小部分内存正在使用。

提前谢谢。

杰米

是的,执行所需操作的一种更好方法是:

  1. 存储帐户中以private Blobs方式托管文件
  2. 获取文件的 HTTP 请求时,请为 Blob 生成SAS令牌,并仅返回文件的SAS URL作为响应。SAS 令牌的有效性可能因您的要求而异,但明智的做法是将其保持在最低限度。
  3. 因此,客户端本质上将获得一个公共URL,该URL在有限的时间内有效,以获取zip文件,而不会消耗服务的资源。

最新更新