从URI下载文件与从Web API返回文件

时间:2019-01-11 14:55:55

标签: c# asp.net .net asp.net-web-api download

拥有/托管Web API 2应用程序时,我正在编写一个桌面应用程序,需要在其中基于某些条件下载.zip文件。我遇到过两种方法,但不确定哪种方法更安全,更合适:

1)在最初的方法中,我使用提供的条件对Web api进行了函数调用。该API将创建zip文件并返回特定的路径字符串。然后,我使用WebClient.DownloadFileAsync从以下路径下载相关文件:

private async Task<bool> DownloadFile(SOME PARAMETER)
{
var result = false;
var _stopwatch = new Stopwatch();

try
{
    using (var _client = new WebClient())
    {
        // Returns the Uri of the file
        var downloadAddress = await GetDownloadFileAddress(SOME PARAMETER);

        if (!string.IsNullOrEmpty(downloadAddress))
        {
            // Some local path
            var downloadFilePath = "C:\MyLocalPath"

            _stopwatch.Start();

            _client.DownloadFileCompleted += wc_DownloadFileCompleted;
            _client.DownloadProgressChanged += wc_DownloadProgressChanged;
            _client.DownloadFileAsync(new Uri(downloadAddress), downloadFilePath);

            result = true;
        }
    }
}
catch (Exception ex)
{
    ModErrorHandler.HandleError(ex, MethodBase.GetCurrentMethod().Name, Application.ProductName);
}

return result;
}

我喜欢上面的内容,因为文件可能接近1 gig,所以我可以显示进度条以显示下载进度,也可以将文件复制到特定的本地路径。但是,我担心这不是公开通过Uri的安全方法(?!)

2)然后,我想我可以直接从API返回相关文件。可以在此处找到示例代码: How to return a file (FileContentResult) in ASP.NET WebAPI

api身份验证现在将处理安全性和无效的下载请求。但是,我不确定这是否适用于超过1GB的文件。更重要的是,我不确定如何在进度条中显示下载进度以及如何将文件复制到特定的本地路径,这两种方法都将在第一种方法中解决。

有人可以建议哪种方法真正正确吗?如果是2,请为我提出的问题提供一些提示?

0 个答案:

没有答案