2017-03-16 21 views
0

私はaspxを実行しているWebアプリケーションを持っています。提出中、サポート文書(通常はpdfに変換された画像)がSQLサーバにアップロードされ、バイナリとして保存され、承認中にさまざまな時点で再度ダウンロードできます。ウェブサイトからダウンロードしてPDFファイルを開くことはできませんが、Edgeで開くことができます

しかし、私たちはユーザーがAdobeのAdobe Readerでpdfを開くことができず、恐ろしい "ファイルが壊れて修復できませんでした"という問題が発生し始めたところです。エラーメッセージ。彼らはまだMSエッジで開くことができるので、実際には破損していません。私はpdfがアップロードされる前に正常に開けられることを確認しました。

HttpPostedFile file = this.attachmentUploader.PostedFile; 
if (file == null) 
{ 
    file = Session["postedFile"] as HttpPostedFile; 
} 

if (file != null) 
{ 
    var fileName = this.attachmentUploader.FileName; 
    fileName = fileName.Length >= 100 ? string.Concat(fileName.Substring(0, 50).Trim(), ".pdf") : fileName; 
    Attachment attachment = new Attachment() 
    { 
     FileName = fileName, 
     File = this.attachmentUploader.FileBytes 
    }; 

    db.Attachments.Add(attachment); 
    db.SaveChanges(); 
} 

これは大歓迎任意のヘルプダウンロードコード

byte[] file = null; 
// Code here to pull file from db 
if (file != null) 
{ 
    Response.Buffer = true; 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("Content-Disposition",  "attachment;filename=support_doc.pdf"); 
    Response.OutputStream.Write(file, 0, file.Length); 
} 

です!

+0

*「まだMSエッジで開くことができるので、実際には破損していません。」* - 間違っています。たぶん偶然に1人の視聴者が実際にガーベジであるかもしれないものを正しく表示しているからといって、データがガーベジではないというわけではありません。ダメージの比較と分析を可能にするために、PDFを良いバージョンと悪いバージョンの両方で共有した場合に役立ちます。 – mkl

答えて

0

実際にダウンロードされたファイルは、実際のP​​DFとHTMLファイルの2つの連結ファイルで構成されています。

HTMLファイルのサイズは約70 KBで、外部のJavaScriptや画像がない状態で、それは次のようになります。

[プライバシーの理由で削除--- ---画像]

Iあなたの "ダウンロードコード"の後に、このHTMLを出力に追加するコードがいくつかあるとします。

コードを検索したい場合や、Response.OutputStreamを閉じてResponse.OutputStream.Write(file, 0, file.Length)の直後に回答を終了したい場合があります。


PDFプロセッサは、クロスリファレンス情報があるが、手でのファイルの場合にはゴミの約70キロバイトまでPDFとして存在し、その端部からPDFの読み出しを開始しなければならないPDF仕様によります構文が関係している。

したがって、すべてのPDFビューアがファイルを無効として拒否しても問題ありません。

+0

@KeithR。答えから画像を削除しても、それは改訂履歴に残ることに注意してください。私は司会者の注意を喚起して、あなたがイメージを削除したいと説明し、あなたの理由をメッセージに記入することを提案します。司会者は従業員に連絡を取って、更新履歴から画像を削除することができます。もしそれがあなたの意図だったのであれば、同じことをしてください。 –

関連する問題