Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 为什么FileStreamResult没有结果?_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 为什么FileStreamResult没有结果?

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

我必须从图像URL路径下载压缩图像。下载的图像是清晰的。但问题是并没有出现提示窗口,即FileStreamResult不返回任何内容

Asp.NET MVC控制器post方法:

[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下载。这在很大程度上是出于安全原因,没有办法避免。你必须使用其他方法。