
MemoryStream ms = xxxx//图片类型
return File(ms, "image/jpeg")
跟踪了一下File的结果,确实已经有数据,但是无法在页面上返回(此时File重写方法返回的是FileSreamResult)。
但如果把这个Stream先保存为文件,然后直接返回文件名是可以的:
return File(filename, "image/jpeg")
此时File重写方法返回的是FileContentResult。
经过比较发现,这两个方法其实都可以获取到正确的FileSreamResult或者FileContentResult,只不过MVC无法正确渲染FileSreamResult,于是walkaround一下:
MemoryStream ms = xxxx//图片类型
return File(ms.ToArray(), "image/jpeg")
这样就把MemoryStream转成byte[]类型,返回类型为FileContentResult,可以正常输出。
方法如下function convertImgToBase64(url, callback, outputFormat)
{var canvas = document.createElement('CANVAS'),
ctx = canvas.getContext('2d'),
img = new Image
img.crossOrigin = 'Anonymous'
img.onload = function(){canvas.height = img.height
canvas.width = img.width
ctx.drawImage(img,0,0)
var dataURL = canvas.toDataURL(outputFormat || 'image/png')
callback.call(this, dataURL)
canvas = null}
img.src = url}
我觉这是浏览器的事情了,只要你返回的数据是下载模式,然后将返回的字符串重新放入浏览器的url中,相当于:window.location="返回的字符串连接"你试一试,应该可以。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)