CopyTo使用xlsx文件在打开时出错

时间:2014-05-23 13:26:39

标签: c# excel file input stream

我有以下IHttpHandler(ashx)处理程序:

public class UploadFile : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        using (var fileStream = File.OpenWrite(@"C:\" + context.Request.QueryString["FileName"]))
        {
            context.Request.InputStream.CopyTo(fileStream);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

来自:

$.ajax({
    type: "POST",
    url: "UploadFile.ashx?FileName=" + file.name,
    data: file,
    success: function () {
        alert("Success");
    },
    processData: false,
    contentType: file.type
});

文件变量来自<input type="file" />,使用document.getElementById("fuExcelFile").files[0]检索。

这项工作似乎与xlsx以外的所有文件一样。使用xlsx,文件被上传,但是当我在Excel中打开它时,我收到以下错误:

  

我们发现“.xlsx”中的某些内容存在问题。你想要   我们试图尽可能多地恢复?如果你相信的来源   此工作簿,单击是

我不知道从哪里开始,因为它适用于其他文件:S

编辑:Here是我在十六进制编辑器中测试的文件及其图像 Hex Editor

1 个答案:

答案 0 :(得分:1)

这很难。

在评论的讨论中,我们发现目标文件比源文件大。 Excel仍然可以打开它但发出警告。这闻起来像是部分腐败。

结果File.OpenWrite 追加到现有文件。在测试期间,您一遍又一遍地附加相同的文件。

调试这个的关键是二进制比较文件。如果您遇到错误并且不知道它是什么:调查!实验。获取新信息。改变设置。