为什么Response.TransmitFile不返回我的WCF服务中的文件?

时间:2019-01-24 11:31:47

标签: c# excel wcf httpresponse response.transmitfile

如果您可以向我解释为什么TransmitFile不能正常工作,代码很简单,那么我创建excel文件(.xlsx),将其保存在服务器上并返回文件路径(通过CreateProjectsReport),然后我只想获取文件并将其传输给用户....

string filePath = CreateProjectsReport(ProjectIds, items);

System.IO.FileInfo file = new System.IO.FileInfo(filePath);

if (file.Exists)
{
    HttpContext context = HttpContext.Current;

    try
    {
        context.Response.Clear();
        context.Response.ClearHeaders();
        context.Response.ClearContent();
        context.Response.AddHeader("Content-Disposition", 
                                   "attachment; filename=" + file.Name);
        context.Response.AddHeader("Content-Length", file.Length.ToString());

        // context.Response.ContentType = "application
        // vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        context.Response.ContentType = "application/vnd.ms-excel";
        context.Response.TransmitFile(file.FullName);
        context.Response.Flush();
        // context.Response.WriteFile(file.FullName, false);                                
    }
    catch (Exception ex)
    {
        LogException(ex);
    }
    finally
    {
        System.IO.File.Delete(filePath);
        context.Response.End();
    }
}

此代码的结果是文件被保存在服务器上的预期文件夹中(完整报告存在,我已验证方法生成的excel文件),在response.Flush()上,我看到该文件正在浏览器上传输内容长度为30kb,因为文件长度在服务器上,但是一旦我单击“保存”并将文件保存到我的下载文件夹中,文件的长度为10kb,用excel打开它会出现错误:{{1} }。

已检查IIS MIME类型,它已设置(我尝试将两者用于内容类型,都得到相同的错误):

.xls-Excel foudn unreadable content in 'filename.xlsx'. Do you want to recover ....

.xlsx-application/vnd.ms-excel

context.Response.TransmitFile是否禁止我的文件并且不发送文件的全部内容?为什么会这样?

编辑

通过浏览器控制台,我可以看到在application/vnd.openxmlformats-officedocument.spreadsheetml.sheet属性Response.Header中文件的确切长度,但是一旦我单击content-length文件,该文件的大小将从顶部的1kb变为15kb。服务器上30kb的文件(例如Save不会传输整个文件

Example

0 个答案:

没有答案