使用ServiceStack下载文件HttpResult:如何为下载的内容指定文件名?

时间:2016-07-22 11:06:28

标签: c# servicestack

我正在使用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属性,但没有运气。 提前谢谢!

3 个答案:

答案 0 :(得分:3)

您应该设置' Content-Disposition' HTTP结果的标头。这允许设置文件名:

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

答案 1 :(得分:2)

我找到了解决方案。我被HttpResult的只读属性所欺骗。 为了更改默认文件名,我发现我必须添加以下行来处理内容处理:

result.Headers[HttpHeaders.ContentDisposition] = "attachment; filename=\"UserSurname_UserName.pdf\"";

谢谢大家的时间!

答案 2 :(得分:0)

如果我理解你的问题,你想要的是用户想要重命名文件。这与服务器无关。用户必须对他使用的brwoser进行一些更改。

例如Firefox - 工具>选项>一般

然后检查“总是问我在哪里保存文件”

Chrome - 设置>下载

然后检查“询问在哪里保存每个文件”

然后它将打开文件浏览器保存的位置,您可以更改您想要的文件名