2013-06-30 2 views
0

Мне нужно скачать zipped изображение из URL-адреса URL-адреса изображения. Загрузка изображения понятна. Но проблема в том, что окно подсказки не появляется, то есть FileStreamResult ничего не возвращает.Почему 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 [] получаются с использованием метода почты Ajax \ JqueryUI. Фактически значения - это значение checkBox, которое проверяется.

+0

Вы не можете загрузить файл через ajax, так как ajax является асинхронным .. и пользователь должен разрешить загрузку. Таким образом, вы должны открыть новое окно, если хотите, чтобы запрос произошел без перенаправления текущего окна. –

+0

Тогда как я могу это сделать? – user2536026

+0

Я только что рассказал вам, как вам нужно открыть новое окно с URL-адресом загружаемого файла. –

ответ

0

Вот как я загрузил изображения в тег img.

Использование C# mvc. ImageHelper - мой собственный помощник, имена должны быть объяснительными. Загрузка его из массива байтов (varbinary (max)) в базу данных sql.

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, это был более старый код.

Смежные вопросы