ASP.NET下载的文件已损坏

时间:2010-08-05 16:44:11

标签: asp.net sharepoint download corrupt

我已编写以下代码从sharepoint下载文件。下载的文件只在某些机器上正常工作。对于其他人,它说该文件已损坏。问题出在MS Office和图像文件上,但PDF没有任何问题。我们已经确定了腐败问题,因为在文件内容的顶部添加了十六进制数字。删除后,文件将正确打开。已跟踪十六进制字符以表示文件大小(以字节为单位)。为什么只在某些机器上发生这种情况,我们如何解决?

private void DownloadFile()
{   
    SPListItem item = GetFileFromSharepoint();

    if (item != null)
    {
        byte[] bytes = item.File.OpenBinary();
        Response.ClearContent();
        Response.ClearHeaders();
        string fileType = string.Empty;
        fileType = item["FileFormat"].ToString();
        Response.AppendHeader("Content-Disposition",
                              string.Format("attachment; filename= {0}", item["Filename"].ToString().Replace(" ", "")));
        Response.ContentType = GetContentType(fileType);
        //Check that the client is connected and has not closed the connection after the request
        if (Response.IsClientConnected)
        {
            Response.BinaryWrite(bytes);
        }
    }

    Response.Flush();
    Response.Close();
}

1 个答案:

答案 0 :(得分:0)

来自the documentation,似乎暗示:

  

OpenBinary方法如果失败则失败   文件大小为0(零)字节。

您确定此功能的返回值是否正确?您没有检查bytes数组的长度。

<强>更新

也许将SPOpenBinaryOptions.Unprotected传递给  OpenBinary可能有用吗?