2015-04-28 4 views
2

Я пытаюсь начать загрузку файлов с сервера, теперь только с некоторыми жестко заданными значениями для файлов, которые существуют, но по какой-то причине загрузка не запускается и не возникает ошибка.Загрузка файла загрузчика генератора не начинается

Это код, у меня есть:

public void ProcessRequest(HttpContext context) 
{ 
    string destPath = context.Server.MapPath("~/Attachments/cover.txt"); 
    // Check to see if file exist 
    FileInfo fi = new FileInfo(destPath); 

    if (fi.Exists) 
    { 
     HttpContext.Current.Response.ClearHeaders(); 
     HttpContext.Current.Response.ClearContent(); 
     HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString()); 
     HttpContext.Current.Response.ContentType = "application/octet-stream"; 
     HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + "cover.txt"); 
     HttpContext.Current.Response.BinaryWrite(ReadByteArryFromFile(destPath)); 
     HttpContext.Current.Response.End(); 
    } 
} 

public bool IsReusable 
{ 
    get 
    { 
     return false; 
    } 
} 

private byte[] ReadByteArryFromFile(string destPath) 
{ 
    byte[] buff = null; 
    FileStream fs = new FileStream(destPath, FileMode.Open, FileAccess.Read); 
    BinaryReader br = new BinaryReader(fs); 
    long numBytes = new FileInfo(destPath).Length; 
    buff = br.ReadBytes((int)numBytes); 
    return buff; 
} 

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

Ребята, вы видите, что-то не так?

Спасибо заранее, Лацьале

+0

Вы проверили свой заголовок и убедитесь, что 'byte []' действительно заполнен? – Greg

+0

@Greg отзыв header http://i.gyazo.com/005c1b12e8f4cb1bb55845160c934529.png – Laziale

+0

Я также попытался с pdf, так как вы можете видеть, что содержание фактического pdf написано на вкладке ответа, но документ не показан для загрузки http://i.gyazo.com/c4038962e8a385257c8eb8cf257fc9a7.png – Laziale

ответ

1

Я считаю, что вопрос ваш иметь в том, что свое призвание HttpContext.Current. Так как вы используете Общий файл обработчика Я считаю, что вы захотите использовать параметр context, передаваемый вашей сигнатуре метода. Примером может быть:

public void ProcessRequest (HttpContext context) 
{ 
    // Build Document and Zip: 
    BuildAndZipDocument(); 

    // Context: 
    context.Response.ContentType = "application/zip"; 
    context.Response.AddHeader("content-disposition", "filename="Commodity.zip"); 
    zip.Save(context.Response.OutputStream); 

    // Close: 
    context.Response.End(); 
} 

Я считаю, что если вы используете context, а не HttpContext.Current это будет решить вашу проблему.

+0

Нет, результат все равно остается при развертывании контекста. Также вы ввели метод BuildAndZipDocument, почему? Thx – Laziale

+0

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

+0

Что такое метод BuildAndZipDocument, можете ли вы поделиться этим PLS? Спасибо – Laziale

0

НИКОГДА не используйте "application/zip" в заголовке Content-Type для ZIP-файла. НИКОГДА! Подтвержденная ошибка в IE6, которая повредит загрузку.

Если вы хотите наиболее универсальное поведение для двоичного файла в большинстве браузеров прошлого и настоящего, ВСЕГДА используйте «приложение/октет-поток» так же, как вы видите, что оно используется везде!

header ('Content-Type: application/octet-stream');

Это преодолевает ошибку IE6, если у вас есть вопросы. Тем не менее, вы ничего не добились, переключившись с приложения/октета-потока на приложение/zip, так что вы также можете перестать тратить свое время на это и поддерживать его приложение/октет-поток.

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