Asp.net mvc 3 为什么FileStreamResult没有结果?
我必须从图像URL路径下载压缩图像。下载的图像是清晰的。但问题是并没有出现提示窗口,即FileStreamResult不返回任何内容 Asp.NET MVC控制器post方法:Asp.net mvc 3 为什么FileStreamResult没有结果?,asp.net-mvc-3,Asp.net Mvc 3,我必须从图像URL路径下载压缩图像。下载的图像是清晰的。但问题是并没有出现提示窗口,即FileStreamResult不返回任何内容 Asp.NET MVC控制器post方法: [AcceptVerbs(HttpVerbs.Post)] public FileResult Extract(string[] name) { using (ZipFile zip = new ZipFile()) //Zip section { foreach (var item
[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
}
}
我的问题是returnfilestreamresult不起作用-为什么?我尝试了太多,但没有成功。字符串[]name的值是通过使用Ajax\JqueryUI post方法获得的。实际上,这些值是选中的复选框的值。这就是我将图像加载到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');
$.post(“/Account/GetLogoImage2”,{},函数(结果){
如果(结果ImgBase64){
$('#logo_image').html('');
}
}“json”);
是的,我有GetLogoImage和GetLogoImage2函数。清理GetLogoImage时,这是较旧的代码。您不能通过ajax下载文件,因为ajax是异步的。。用户必须允许下载继续进行。因此,如果您希望在不重定向当前窗口的情况下执行请求,则必须打开一个新窗口。我刚才告诉过您如何,您必须打开一个包含要下载文件URL的新窗口。为什么不能通过ajax请求下载文件?请描述背后的机制that@Mystere你能告诉我,在asp.net mvc 3中,如果不使用Ajax/JQuey,我如何将复选框的值仅发布到控制器?你通常不会发布任何内容,您可以使用get并将它们作为querystring参数传递。事实是,您根本无法通过ajax下载。这在很大程度上是出于安全原因,没有办法避免。你必须使用其他方法。