0

我必须从图像 URL 路径下载压缩图像。下载图像清晰。但问题是没有出现提示窗口,即 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 被选中的值。

4

1 回答 1

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,这是较旧的代码。

于 2014-02-14T21:42:44.907 回答