Web API下载锁定文件

JBuus

我在使用WebAPI方法时遇到一个小问题,该方法在用户调用该方法的路由时下载文件。

该方法本身非常简单:

public HttpResponseMessage Download(string fileId, string extension)
{
    var location = ConfigurationManager.AppSettings["FilesDownloadLocation"];
    var path = HttpContext.Current.Server.MapPath(location) + fileId + "." + extension;

    var result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    return result;
}

该方法按预期工作-我第一次调用它。文件已传输,我的浏览器开始下载文件。

但是-如果我从自己的计算机或任何其他计算机上再次调用相同的URL-我会收到一条错误消息:

该进程无法访问文件'D:\ ... \ App_Data \ pdfs \ test-file.pdf',因为该文件正在被另一个进程使用。

该错误持续大约一分钟-然后我可以再次下载该文件-但只能下载一次-然后我必须等待一分钟左右,直到该文件被解锁。

请注意,我的文件很大(100-800 MB)。

我的方法中缺少什么吗?似乎流似乎将文件锁定了一段时间或类似的东西?

谢谢 :)

Fabien PERRONNET

这是因为文件被第一个流锁定,因此必须指定一个FileShare,以允许它由多个流打开:

public HttpResponseMessage Download(string fileId, string extension)
{
    var location = ConfigurationManager.AppSettings["FilesDownloadLocation"];
    var path = HttpContext.Current.Server.MapPath(location) + fileId + "." + extension;

    var result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    return result;
}

这样,您就可以允许多个流打开此文件以进行只读。

有关该构造函数重载的信息,请参见MSDN文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Web API从javascript下载xml文件

来自分类Dev

使用HttpClient下载Web API大文件

来自分类Dev

Web API中文件下载的内容协商

来自分类Dev

使用WEB API模拟文件下载

来自分类Dev

使用HttpClient下载Web API大文件

来自分类Dev

使用closedxml从web api下载excel文件

来自分类Dev

调用WEB API下载excel文件

来自分类Dev

从Angular JS中的Web API下载csv文件

来自分类Dev

带有Web Api 2的Angular下载csv文件

来自分类Dev

从Web API服务下载pdf文件时出现问题

来自分类Dev

使用Jquery Post使用Web API下载文件

来自分类Dev

为什么Web Api HttpResponseMessage无法下载文件?

来自分类Dev

在.NET Core Web API中下载Excel文件

来自分类Dev

MVC Web Api + Ajax创建和下载Zip文件

来自分类Dev

从Web API服务下载pdf文件时出现问题

来自分类Dev

使用Jquery Post使用Web API下载文件

来自分类Dev

为什么Web Api HttpResponseMessage无法下载文件?

来自分类Dev

使用Play Web API下载文件(异步)

来自分类Dev

Web API 工作簿下载

来自分类Dev

AngularJS + Web API-如何安全地下载excel文件而无需再次登录

来自分类Dev

如何使用ASP.net Web API和Javascript下载二进制文件?

来自分类常见问题

使用AngularJS从ASP.NET Web API方法下载文件

来自分类Dev

使用异步Task <IHttpActionResult>的Web API 2下载文件

来自分类Dev

Data Factory无法使用基本身份验证从Web API下载CSV文件

来自分类Dev

AngularJS + Web API-如何安全地下载excel文件而无需再次登录

来自分类Dev

使用ASP.net Web API的angular js SPA中的文件下载无法正常工作?

来自分类Dev

使用Web视图下载文件

来自分类Dev

使用Excel VBA从Web下载zip文件

来自分类Dev

创建PDF文件以在Java Web中下载

Related 相关文章

热门标签

归档