2015-02-05 3 views
0

Мне нужно скачать zip-файл с помощью ajax и ashx. В настоящее время я использую код https://stackoverflow.com/a/23797348, но загруженный zip-файл недействителен.Загрузите zip-файл с помощью ответа ajax

Код ASHX я использую это:

MemoryStream exportPrjtResponseMemStream = SomeClass.ReturnResponse(ID); 

Response.ContentType = "application/zip"; 

Response.AppendHeader("content-disposition", "attachment; filename=\"" + fileName + ".zip\""); 

Response.CacheControl = "Private"; 

Response.AppendHeader("Content-Length", exportPrjtResponseMemStream.Length.ToString());        
exportPrjtResponseMemStream.WriteTo(Response.OutputStream); 

Response.Flush(); 

Response.End(); 

Просьба предложить.

+0

Пожалуйста, отформатируйте код с помощью ctrl + k. это нечитаемо – kpblc

+0

Что такое дельта в размере байта загруженного файла по размеру сервера, что такое треугольник содержимого между этими двумя файлами? –

+0

@MichalHainc нет дельта между двумя файлами обоих размеров одинакового размера. – arjun

ответ

0
  • Вы задаете 'Response.BufferOutput=true'?
  • После того, как вы прочитали MemoryStream (exportPrjtResponseMemStream), установите положение 0 exportPrjtResponseMemStream.Position=0, прежде чем использовать его для записи в OutputStream.
  • Попробуйте использовать «Response.OutputStream.Flush()»

Мое предположение является ResponseStream не должным образом построен. Также попробуйте установить все заголовки в соответствии с решением в your link above.

HTH!

+0

Да, я правильно настраиваю заголовки, я получаю поток памяти в ответе браузера, но он не загружается. – arjun

+0

Привет, Можете ли вы удалить 'Response.End()' и попробовать? Почему я спросил «Response.BufferOutput = true», потому что вам не нужно вызывать 'Response.End()' после 'Response.Flush()'. В противном случае используйте «Response.Clear(); exportPrjtResponseMemStream.WriteTo (Response.OutputStream); Response.End(); ' – amitthk

+0

Кроме того, будьте внимательны к чувствительности к регистру. Я имею в виду 'Response.CacheControl =" private "'. Я вижу, вы упомянули, что ваш код работает с iframe, иначе я бы предложил ручную запись MemoryStream, как в [этой ссылке] (http://support.microsoft.com/kb/812406) – amitthk