我正在使用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属性,但没有运气。 提前谢谢!
答案 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 - 设置>下载
然后检查“询问在哪里保存每个文件”
然后它将打开文件浏览器保存的位置,您可以更改您想要的文件名