使用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属性,但没有成功。提前感谢!

使用ServiceStack 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-设置>下载

然后检查"询问在之前将每个文件保存在哪里"

然后它会打开文件浏览器保存,你可以更改你想要的文件名