为什么FileStreamResult没有结果?

时间:2013-06-30 09:22:34

标签: asp.net-mvc-3

我必须从图片网址路径下载压缩图片。下载图像很清楚。但问题是没有出现提示窗口,即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的值,检查它们。

1 个答案:

答案 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时,这是旧代码。