在Firefox中下载文件时出错

时间:2011-06-06 10:19:20

标签: javascript asp.net-mvc model-view-controller

我在申请时遇到问题。 我在应用程序中有一些部分,用户可以在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");
        }

感谢任何帮助。 谢谢

3 个答案:

答案 0 :(得分:1)

你有一些FF下载管理器扩展吗?

无论如何,当您的安全软件停止下载然后恢复它时,通常会发生此问题。

如果文件正被下载到您的临时文件夹,FF可能无法访问此文件夹并继续下载。

另一个解决方案可能是关闭FF并从配置文件夹中删除此文件:“compreg.dat”。

源: http://kb.mozillazine.org/Source_file_could_not_be_read

答案 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());
                }
            }
    }