我在申请时遇到问题。 我在应用程序中有一些部分,用户可以在excel文件中下载数据.Code在本地工作得非常好,因为每个浏览器都可以在本地正常下载。但是当我们从测试或实时服务器下载文件时,它会显示一个弹出窗口,显示以下错误
“C:\用户\ PHT〜1.AMI \应用程序数据\本地\ TEMP \ hXybMbIw.xlsx.part 无法保存,因为来源 文件无法读取。再试一次 稍后,或联系服务器 管理员。“
仅限firefox浏览器。
我正在使用以下代码进行文件下载
function ExportToExcel(isJdl) {
var url = '/Product/ExportToExcel?isJdl=' + isJdl
+ "&projID=" + _projID
+ "&PlanPages=" + escape($("#PlanPages").val())
+ "&SpecSections=" + escape($("#SpecSections").val())
+ "&Addenda=" + escape($("#Addenda").val())
+ "&HighLite=" + $("#chkHighLite").attr("checked");
Download(url);
}
function Download(url) {
var win = window.open(url, "DownloadWin", "resizable=0,status=0,toolbar=0,width=600px,height=300px");
win.focus();
win.moveTo(100, 100);
}
控制器代码如下: -
public void ExportToExcel(bool isJdl, string projID, string planPages, string specSections, string addenda, string HighLite)
{
int pID = int.Parse(projID.Decrypt());
bool HightLiteVal = false;
if (!string.IsNullOrEmpty(HighLite))
HightLiteVal = Convert.ToBoolean(HighLite);
Highmark.BLL.Models.Project proj = Highmark.BLL.Services.ProjectService.GetByID(pID);
if (proj != null)
{
proj.PlanPages = planPages;
proj.SpecSections = specSections;
proj.Addenda = addenda;
proj.HighLite = HightLiteVal;
using (OfficeOpenXml.ExcelPackage pck = new OfficeOpenXml.ExcelPackage())
{
OfficeOpenXml.ExcelPackage pck1 = Highmark.BLL.Services.ProjectService.GetExcelFile(isJdl, pck, pID, proj, planPages, specSections, addenda);
string name = string.Format("{0}", proj.ProjectName);
if (pck1.Workbook.Worksheets.Count > 0)
{
//Write it back to the client
Response.ContentType = "Application/vnd.ms-Excel";
//Remove Invalid Character from File Name
name = name.RemoveInvalidCharFromFileName();
Response.AddHeader("content-disposition", "attachment; filename=\"" + name + "_HighEST.xlsx\"");
Response.BinaryWrite(pck1.GetAsByteArray());
}
}
}
else
Response.Write("Error: Invalid request, please try again");
}
感谢任何帮助。 谢谢
答案 0 :(得分:1)
你有一些FF下载管理器扩展吗?
无论如何,当您的安全软件停止下载然后恢复它时,通常会发生此问题。
如果文件正被下载到您的临时文件夹,FF可能无法访问此文件夹并继续下载。
另一个解决方案可能是关闭FF并从配置文件夹中删除此文件:“compreg.dat”。
答案 1 :(得分:0)
永远不要对网址进行硬编码。在处理网址时始终使用网址助手:
var url = '@Url.Action("ExportToExcel", "Product")?isJdl=' + isJdl
+ "&projID=" + _projID
+ "&PlanPages=" + escape($("#PlanPages").val())
+ "&SpecSections=" + escape($("#SpecSections").val())
+ "&Addenda=" + escape($("#Addenda").val())
+ "&HighLite=" + $("#chkHighLite").attr("checked");
当您的应用程序部署在实时服务器上时,需要附加应用程序的名称。所以正确的网址是:
/AppName/Product/ExportToExcel?...
而不是:
/Product/ExportToExcel?...
这就是为什么在处理网址时应该始终使用网址助手的原因。
答案 2 :(得分:0)
我在下面的代码中得到了同样的错误。通过在我的案例中注释Response.Flush(),Response.Close(),Response.End()来解决它。
public void ExportClentList(string[] DataArray, string ToatalHours)
{
using (OfficeOpenXml.ExcelPackage pck = new OfficeOpenXml.ExcelPackage())
{
OfficeOpenXml.ExcelPackage excelExportedData = GetBackToClientProjectReport(pck, DataArray, ToatalHours);
if (excelExportedData.Workbook.Worksheets.Count > 0)
{
Response.ContentType = "Application/vnd.ms-Excel";
Response.AddHeader("content-disposition", "attachment; filename=\"BackToClientProjectReport.xlsx\"");
Response.BinaryWrite(excelExportedData.GetAsByteArray());
//Response.Flush();
//Response.Close();
//Response.End();
}
else
{
Response.ContentType = "Application/vnd.ms-Excel";
Response.AddHeader("content-disposition", "attachment; filename=\"BackToClientProjectReport.xlsx\"");
OfficeOpenXml.ExcelPackage pc1k1 = new OfficeOpenXml.ExcelPackage();
ExcelWorksheet ws = pc1k1.Workbook.Worksheets.Add("Sheet1");
ExcelRange r = ws.Cells[1, 1];
r.Value = "No Record Found";
Response.BinaryWrite(pc1k1.GetAsByteArray());
}
}
}