Ошибка в файле после загрузки - PullRequest
0 голосов
/ 17 июля 2010

У меня есть текстовый документ, который прекрасно открывается на сервере, но когда я загружаю его, используя событие нажатия кнопки на моем веб-сайте, он становится точным. Я использую приведенный ниже код при нажатии кнопки, чтобы загрузить документ. пожалуйста, помогите решить эту проблему: я использую .net Framework 3.5

 Response.Clear();
 Response.AddHeader("Content-Disposition", "attachment; filename=StandardLetter" + _responseId.ToString() + ".doc");
 Response.ContentType = "application/octet-stream";

 Response.TransmitFile (Server.MapPath("~/document/letter/StandardLetter" + _responseId.ToString() + ".doc"));

Ответы [ 3 ]

2 голосов
/ 17 июля 2010

У вас есть Response.End() после того кода, который вы опубликовали? Если нет, вы получите дополнительный «html» код из файла aspx, добавленного к передаваемому файлу, что приведет к его повреждению.

EDIT
Как отметил Акшай Ананд, лучшим способом было бы позвонить HttpContext.Current.ApplicationInstance.CompleteRequest(); вместо Response.End() , см. Документы . Смотри также этот вопрос .

1 голос
/ 17 июля 2010

Хорошо, вот код, который я использую, он vb, но его легко конвертировать;)

 Response.ContentType = "application/pdf"
        Dim byteArray As Byte() = File.ReadAllBytes(MergedFile)

        Response.AddHeader("Content-Disposition", "attachment;filename=""" & ShortFilename & """")
        Response.AddHeader("Content-Length", byteArray.Length)
        Response.BinaryWrite(byteArray)
        Response.Flush()
        Response.End()

Это работает для PDF, и изменение .ContentType на Excel тоже выплевывает .. Так что я предполагаю, что это будетвозьми любой тип MIME.Удачи!

Я беру свой pdf-документ под названием MergedFile и преобразую его в byte (), я даю ему «ShortName», которое может ввести пользователь.Длина контента очень важна ..

1 голос
/ 17 июля 2010

Вместо этого попробуйте:

Response.ContentType ="application/msword";

Я не использую Word, но для Excel я использую:

Response.ContentType = "application/x-msexcel"
...