使用ServiceStack HttpResult下载文件:如何为下载的内容指定文件名
本文关键字:下载 文件名 HttpResult ServiceStack 文件 使用 | 更新日期: 2023-09-27 17:58:16
我将ServiceStack用于一个简单的web应用程序。主要目的是让用户下载一个文件。我使用的HttpResult如下:
public class FileDownloadService : Service
{
public object Any()
{
string fileFullPath = "...";
string mimeType = "application/pdf";
FileInfo fi = new FileInfo(fileFullPath);
byte[] reportBytes = File.ReadAllBytes(fi.FullName);
result = new HttpResult(reportBytes, mimeType);
return result;
}
}
这将在用户浏览器中打开一个对话框,用户可以指定保存文件的位置。指定了一个默认名称,即ServiceStack的restPath的名称。
我的问题是:当用户选择保存(更改默认文件名)时,是否可以指定自定义文件名?我尝试使用HttpResult属性,但没有成功。提前感谢!
您应该在HTTP结果上设置"Content-Disposition"标头。允许设置文件名:
public object Any()
{
string fileFullPath = "...";
string mimeType = "application/pdf";
FileInfo fi = new FileInfo(fileFullPath);
byte[] reportBytes = File.ReadAllBytes(fi.FullName);
result = new HttpResult(reportBytes, mimeType);
result.Headers.Add("Content-Disposition", "attachment;filename=YOUR_NAME_HERE.pdf;");
return result;
}
我找到了解决方案。HttpResult的只读属性欺骗了我。为了更改默认文件名,我发现我必须添加以下行,用于处理内容处置:
result.Headers[HttpHeaders.ContentDisposition] = "attachment; filename='"UserSurname_UserName.pdf'"";
感谢大家抽出时间!
如果我正确理解你的问题,你想要的是用户想要重命名文件。这与服务器无关。用户必须对他正在使用的brwoser进行一些更改。
例如Firefox-工具>选项>通用
然后检查"总是问我在哪里保存文件"
Chrome-设置>下载
然后检查"询问在之前将每个文件保存在哪里"
然后它会打开文件浏览器保存,你可以更改你想要的文件名