gpt4 book ai didi

asp.net-mvc - 为什么文件名中的空格会导致 IE 在下载文件时删除文件扩展名?

转载 作者:行者123 更新时间:2023-12-02 02:26:31 26 4
gpt4 key购买 nike

我正在使用EPPlus从 CSV 创建 Excel 文件,该文件可以正常工作。不幸的是,以下代码会导致 Internet Explorer 9、10 和 11 删除 .xlsx 文件扩展名,而 Chrome 和 Firefox 则不会。如果我从文件名中删除空格,文件扩展名将在 IE 中按预期工作。

public FileStreamResult DetailsExcel(string id)
{
string custName;
var csv = this.GetCsvForCustomer(id, out custName);
var fileName = String.Format("Report for {0} ({1:d-M-yyyy HH mm})",
custName, DateTime.Now);

MemoryStream stream;

using (var excelPackage = new ExcelPackage())
{
var ws = excelPackage.Workbook.Worksheets.Add(fileName);
ws.Cells["A1"].LoadFromText(csv, this._excelTextFormat);
stream = new MemoryStream(excelPackage.GetAsByteArray());
}

return File(stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileName + ".xlsx");
}

我发现有点工作的两种编程机制是将文件名用引号括起来或对字符串进行UrlEncode。每个都有问题:

String.Format("\"{0}\".xlsx", fileName)
// above renders: __Report for Customer (20-2-2014 11 04)__.xlsx

HttpUtility.UrlEncode(fileName + ".xlsx")
// above renders: Report+for+Customer+(20-2-2014+11+04).xlsx

以上都不是最佳的。当用户使用 IE 浏览时,如何在文件名中包含空格而不丢失文件扩展名?

最佳答案

我无法在我拥有的类似应用程序中重现您所描述的行为。唯一的区别是,我没有首先将字节数组加载到 MemoryStream 中,而是将字节数组传递给 File。

所以尝试从等式中删除MemoryStream。所以代码最终会是这样的:

public ActionResult DetailsExcel(string id)
{
byte[] stream; // changed to byte array

using (var excelPackage = new ExcelPackage())
{
var ws = excelPackage.Workbook.Worksheets.Add(fileName);
ws.Cells["A1"].LoadFromText(csv, this._excelTextFormat);
stream = excelPackage.GetAsByteArray(); // removed MemoryStream
}

return File(stream,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileName + ".xlsx");
}

关于asp.net-mvc - 为什么文件名中的空格会导致 IE 在下载文件时删除文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com