2013-04-25 3 views
0

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

 string filename = Path.GetFileName(FileUpload1.PostedFile.FileName); 
     string filetype = Path.GetExtension(FileUpload1.PostedFile.FileName); 

     int filesize = FileUpload1.PostedFile.ContentLength; 


     Stream fs = FileUpload1.PostedFile.InputStream; 
     BinaryReader br = new BinaryReader(fs); 
     byte[] content = br.ReadBytes((Int32)fs.Length); 



     Objects.Insert_FilesToDatabase(filename, filetype, content,filesize); 

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

 void lnkDownload_Click(object sender, EventArgs e) 
    { 

     string filetype = Objects.GetFileType(Convert.ToInt32(txtslno.Text.Trim())); 
     string filename=Objects.GetFileName(Convert.ToInt32(txtslno.Text.Trim())); 
     int filesize = Objects.GetFileLength(Convert.ToInt32(txtslno.Text.Trim())); 
     byte[] bytfile = new byte[filesize+1000]; 

     Response.Clear(); 
     Response.Buffer = true; 

     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition",attachment;filename="+filename+".pdf"); 
     Response.BufferOutput = true; 
     Response.Charset = ""; 

     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.BinaryWrite(bytfile); 

     Response.End(); 

    } 

Через этот код, я могу загрузить pdf-файл, но я не могу открыть файл pdf. Ошибка в том, что файл неправильно декодирован. Можете ли вы помочь мне в том, где я ошибаюсь?

+0

* * Поместить полное сообщение об ошибке ** – tnw

+0

Adobe Reader не может быть открыт, потому что это либо не поддерживаемый тип файла, либо потому, что файл поврежден (например, он был отправлен как вложение электронной почты и неправильно декодирован) – codewarrior

+0

вы добавляете 1000 здесь 'byte [] bytfile = new byte [filesize + 1000];'? – bUKaneer

ответ

1

Я решил эту проблему через следующий код ..

 byte[] bytfile = Objects.GetFile(Convert.ToInt32(txtslno.Text.Trim())); 
     Response.Clear(); 
     Response.ClearContent(); 
     Response.ClearHeaders(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("Content-Disposition", "attachment;filename="+filename); 
     Response.AddHeader("Content-Length", bytfile.Length.ToString()); 
     Response.OutputStream.Write(bytfile, 0, bytfile.Length); 
     Response.Flush(); 
     Response.End(); 

Я просто не писать бинарное содержимое в поток вывода в формате PDF в моем предыдущем коде .. Спасибо за вашу поддержку

+0

Если это решение для OP, отметьте это как «Accepted Answer», чтобы оно тоже помогло другим. – Win

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