c# - FileStreamResult 不返回主体

标签 c# asp.net asp.net-mvc

我正在尝试通过 IIS7 来回传输文件。

我的操作方法如下:

public ActionResult GiveItBack()
{
    var inFile = Request.Files[0];
    var fileStream = new FileStream(Path.GetTempPath() + "uploadedFile.tif", FileMode.OpenOrCreate);
    inFile.InputStream.Position = 0;
    inFile.InputStream.CopyTo(fileStream);
    return new FileStreamResult(fileStream, "image/tiff");
}

我用 fiddler 调用它,文件在服务器上上传和创建,但 fiddler 显示“响应没有正文”消息而不是图像(文件确实是一个 tif)。原始响应是

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: image/tiff
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcQXJiZWl0c2JlcmVpY2hcUHJvamVrdGUgLSBmcmVtZFxBbXBzMyBQaXBlc1xLaXR0ZWxiZXJnZXIuQU1QUzMuV2ViU2VydmljZVxDb21tYW5kQ2hhaW5cRG9pbmc=?=
X-Powered-By: ASP.NET
Date: Wed, 14 Jun 2017 12:48:22 GMT
Content-Length: 0

如您所见,内容长度为零。为什么图像不回来?

最佳答案

在返回结果之前,您应该将 fileStream 实例的 Position 重置回 0。

来自 CopyTo documentation

Remarks

Copying begins at the current position in the current stream, and does not reset the position of the destination stream after the copy operation is complete.

另外添加一个try/catch,如果FileStream有异常就处理掉,然后重新抛出。

有变化的代码

public ActionResult GiveItBack()
{
    var inFile = Request.Files[0];
    var fileStream = new FileStream(Path.GetTempPath() + "uploadedFile.tif", FileMode.OpenOrCreate);
    try {
        inFile.InputStream.Position = 0;
        inFile.InputStream.CopyTo(fileStream);
        fileStream.Position = 0;
        return new FileStreamResult(fileStream, "image/tiff");
    } catch {
        fileStream.Dispose();
        throw;
    }
}

关于c# - FileStreamResult 不返回主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545506/

相关文章:

c# - 在查询中参数化 WHERE 子句

c# - ASP.NET : Configuration Error(Server Error in '/' Application.)

c# - 如何防止代码隐藏中的属性的 HTML 编码?

c# - 在回发时访问控制文本的首选方式

asp.net-mvc - 在 IIS7 集成模式下获取 NullReferenceException

c# - 在 Silverlight 中,离开包含线程的页面是否会结束线程?

c# - 如何在 Razor 中使字形图标出现在 ajax 链接文本中?

asp.net-mvc - DataAnnotation 验证和自定义 ModelBinder

c# - 后处理程序上的部分页面模型未执行 | ASP.NET Core Razor 页面 2.0

c# - 如何使用 Graphics.Draw 高效渲染图 block ?