Asp.net mvc ASP.NET MVC:FileStreamResult返回的字节太多?
我正在调用一个MVC控制器方法。 返回类型为FileStreamResult。 在这个方法中,我以字节数组的形式创建一个图像。 我正在创建一个MemoryStream,在构造函数中传递字节数组。 然后,我返回一个新的FileStreamResult对象,其中包含内存流对象和构造函数中的“image/png”,因为我的图像是pngAsp.net mvc ASP.NET MVC:FileStreamResult返回的字节太多?,asp.net-mvc,filestream,Asp.net Mvc,Filestream,我正在调用一个MVC控制器方法。 返回类型为FileStreamResult。 在这个方法中,我以字节数组的形式创建一个图像。 我正在创建一个MemoryStream,在构造函数中传递字节数组。 然后,我返回一个新的FileStreamResult对象,其中包含内存流对象和构造函数中的“image/png”,因为我的图像是png public FileStreamResult GetImage() { ImageModel im = new ImageModel();
public FileStreamResult GetImage()
{
ImageModel im = new ImageModel();
var image = im.GetImageInByteArray();
var stream = new MemoryStream(image);
return new FileStreamResult(stream, "image/png");
}
现在,当我从这个调用中获得请求流时,我只是使用以下方法将流字符串转换为字节数组以查看图像。
然而,在这一切完成之后,我的字节数组中的位置比我从MVC控制器方法调用返回时多100多个
public static byte[] ConvertStringToBytes(string input)
{
MemoryStream stream = new MemoryStream();
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(input);
writer.Flush();
}
return stream.ToArray();
}
例如,在“GetImageInByteArray()”调用之后,我有了“byte[256]”。
但是当它从MVC调用返回时,我通过第二个方法转换响应字符串,结果是“byte[398]”
编辑问题
我对GetImage()控制器方法发出的web请求与我假设收到的web请求之间是否存在某种区别
我假设我从该调用接收到的是图像字节数组的内存流。
这就是为什么我只是将其转换回字节数组
我的假设错了吗?字符串是如何编码的?在我看来,这是一个编码问题 尝试将此作为方法代码:
return (new System.Text.UTF8Encoding()).GetBytes(input);
你好我真的很感谢你的帮助,但我决定改弦易辙。 我创建了一个transfer对象,将字节数组作为属性保存。 我将其序列化,然后将对象传递给另一端,在另一端进行反序列化,我的字节数组保持原样
我仍然不清楚HTTP请求是如何附加到正在传递的内存流上的,但我只是走了另一条路。当MVC操作返回结果时,它会通过ASP.NET管道附加到HTTP头上,以便请求者(浏览器)能够理解如何处理响应 对于图像,这些标题可能包括:
Response Code
Content-Length
Content-Type
或任何其他数量的自定义或典型HTTP头()
如果我正确理解了您的问题,那么您正在将整个响应从操作转换为字节,因此很自然,您还将转换头和请求可能返回的任何其他内容(cookies?)
您试图通过请求的反序列化实现什么?你想测试什么吗?你的问题不清楚。你在做什么?这个ConvertStringToBytes方法应该做什么?您在控制器中调用它的位置/原因/方式?为什么它接受一个字符串参数并返回一个字节数组?您不能简单地使用
编码.UTF8.GetBytes(输入)
?为什么图像存储为字符串?请提供详细信息。我正在从客户端的类库调用ASP.NET MVC网站的控制器方法(GetImage()),这将返回一个FileStreamResult。FileStreamResult保存存储图像数据的字节数组内存流。我试图从MVC控制器方法调用的响应中获取字节数组。然后,我将该数组转换为一个base 64字符串,然后将其设置为我的ASPX视图中图像标记的源。从映像创建方法的字节[270]开始,然后当我通过您的方法运行从MVC“GetImage()”控制器方法返回的请求字符串时,我以字节[419]结束。嗯,您真的让我想到了为什么这不起作用,无论如何,很好,您找到了其他解决方案,我们开始!谢谢你,奥马尔,这正是我所怀疑的。“管道”正在附加数据。这是我天真的假设,返回的流就是我将要返回的所有流。我只是在我的应用程序中间层使用了第三方图像生成器(条形码),并将这个图像返回给客户端,以便在ASPX页面上进行渲染。也就是说,我没有尝试使用FileStreamResult对象,而是简单地使用一个数据传输对象来保存字节数组。