【问题标题】:Getting error while download file in Firefox在 Firefox 中下载文件时出错
【发布时间】:2011-06-06 10:19:20
【问题描述】:

我的应用程序遇到问题。 我在应用程序中有一些部分,用户可以从其中下载 excel 文件中的数据。代码在本地工作得非常好,意味着文件在每个浏览器中都可以在本地正确下载。但是当我们从测试或实时服务器下载文件时,它会显示一个带有以下错误的弹出窗口

"C:\Users\PHT~1.AMI\AppData\Local\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");
        }

感谢任何帮助。 谢谢

【问题讨论】:

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


    【解决方案1】:

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

    无论如何,这个问题通常发生在您的安全软件停止下载然后重新开始下载时。

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

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

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

    【讨论】:

    • 感谢您的回复,我也检查了这篇文章。我找到配置文件的路径为“C:\Users\pht.amits\AppData\Roaming\Mozilla\Firefox\Profiles”。但是配置文件文件夹下有两个文件夹,分别命名为“7w8z2coa.default”和“v674fnkk.default”。我在哪里可以找到“compreg.dat”文件?
    【解决方案2】:

    我在下面的代码中遇到了同样的错误。在我的情况下,它通过注释 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());
                    }
                }
        }
    

    【讨论】:

    • 好人!这对我也有用。我只有 Flush() 并删除它并且它有效。看来你真的不需要在 BinaryWrite() 之后做任何事情,因为它会在下载完成之前影响流。
    【解决方案3】:

    永远不要硬编码网址。处理 url 时始终使用 url 助手:

    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?...
    

    这就是为什么在处理 url 时应该始终使用 url 助手的原因。

    【讨论】:

    • 好的,这是错误的原因吗?我正在检查我的代码。
    • @Amit,这可能是原因之一。您的代码可能还有其他问题。很遗憾,您没有显示您的控制器操作,因此我无法进一步帮助您。
    • 我已经添加了上面的控制器。请看看告诉我。谢谢
    猜你喜欢
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2014-07-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多