我必须从图片网址路径下载压缩图片。下载图像很清楚。但问题是没有出现提示窗口,即FileStreamResult什么都不返回。
Asp.NET MVC控制器发布方法:
[AcceptVerbs(HttpVerbs.Post)]
public FileResult Extract(string[] name)
{
using (ZipFile zip = new ZipFile()) //Zip section
{
foreach (var item in name)
{
string exts = Path.GetExtension(item);
string strRealname = Path.GetFileName(item);
using (WebClient client = new WebClient()) // download Section
{
client.DownloadFile(item, Server.MapPath("~/upload/") + strRealname + exts);
}
string filePath = Server.MapPath("~/upload/" + strRealname + exts);
zip.AddFile(filePath, Path.GetFileName(filePath));
}
string dest = Server.MapPath("~/Album.zip");
zip.Save(dest);
byte[] data = System.IO.File.ReadAllBytes(dest);
var strm = new FileStream(dest, FileMode.Open);
//return new FileStreamResult(strm, "application/zip")
return new FileContentResult(data, "application/zip");//Not showing prompt window
}
}
我的问题是返回FileStreamResult不起作用 - 为什么?我尝试过多但没有成功。 string [] name的值是通过使用Ajax \ JqueryUI post方法获得的。实际上,值是checkBox的值,检查它们。
答案 0 :(得分:0)
这是我将图片加载到img标签的方式。
使用C#mvc。 ImageHelper是我自己的小帮手,名字应该是解释性的。 从sql数据库中的字节数组(varbinary(max))加载它。
public JsonResult GetLogoImage2(){
var image = ImageHelper.ByteArrayToImage(SomeDataBaseEntity.EssLogoImageAsBytes);
var png = ImageHelper.ConvertToPng(image);
return Json(new { ImgBase64 = Convert.ToBase64String(ImageHelper.ImageToByteArray(png)) });
}
原始图片加载,我这样设置
事件后的Javascript重新加载图片。
$.post("/Account/GetLogoImage2", {}, function (result) {
if (result.ImgBase64) {
$('#logo_image').html('<img src="data:image/png;base64,' + result.ImgBase64 + '" />');
}
}, 'json');
是的,我有GetLogoImage和GetLogoImage2功能。在清理GetLogoImage时,这是旧代码。