【问题标题】:Returning File() returns more bytes返回 File() 返回更多字节
【发布时间】:2018-02-28 17:57:45
【问题描述】:

考虑以下代码:

//get bytes
var query = await _storage.Get(attachment.Id, General.ContainerType.Uploads);
//just for the sake of debugging
var mem = new MemoryStream(query);
//return the uploaded file
return File(mem, MimeTypesMap.GetMimeType(attachment.FileName), attachment.FileName);

上传一个67kb的.jpg图片然后用这个方法下载后,返回的图片是107kb。我检查了字节是否正确存储和检索,它们确实与我上传的内容一致。如果我上传一个文本文件并返回它的内容和大小是正确的。

我认为 File() 有一些魔力,但我不知道为什么和什么?

【问题讨论】:

  • 文件不应该添加任何有趣的东西。响应标头是什么样的?
  • {"date":["Thu"," 2017 年 9 月 21 日 14:39:27 GMT"],"server":["Kestrel"],"x-powered-by":[ "ASP.NET"],"传输编码":["chunked"],"content-type":["application/octet-stream"],"access-control-allow-origin":["*"] ,"x-sourcefiles":["=?UTF-8?B?QzpcZ2l0aHViXHVuaWt5dGVcc3JjXFVuaWt5dGUuU1BBXGFwaVxmaWxldXBsb2FkXGFmYzM5MTg1LWQ2MTMtNGJlYy1jYTY1LTA4ZDRmZjk3NzdiYQ==?="],"content-disposition":[ .jpg"],"connection":["close"]} @Tratcher
  • 什么是_storage,在这个例子中你从mem.Length得到什么?
  • @KirkLarkin 存储是一个天蓝色的云存储和 mem.Length - 流从字节数组的长度构建它的长度
  • @Hristo 我相信这与您存储上传文件的方式有关。我相信在那个层面上正在发生一些操纵。

标签: asp.net asp.net-core


【解决方案1】:

这与File 无关,但与MemoryStream 有关, 要获取存储在内存流中的字节传递整个流,最好使用其方便的ToArray() 方法。你可以试试Binarywriter

【讨论】:

  • 我尝试了两种解决方案..输出似乎没有任何变化
【解决方案2】:

通过提供 azure blob 存储文件的 URL 并添加几分钟的权限来解决:https://stackoverflow.com/a/30468172/4487530

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2013-03-30
    • 2012-11-02
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多