1

asp.netで次のコードを使用してPDFをダウンロードしています

 try
            {
                string strURL = Directory.GetFiles(Server.MapPath("PDFs/PrintPDF")).SingleOrDefault();

                WebClient req = new WebClient();
                HttpResponse response = HttpContext.Current.Response;
                response.Clear();
                response.ClearContent();
                response.ClearHeaders();
                response.Buffer = true;
                response.AddHeader("Content-Disposition", "attachment;filename=\"" + strURL + "\"");
                byte[] data = req.DownloadData(strURL);
                response.BinaryWrite(data);
                response.End();//At this line I am getting the error

            }
            catch (Exception ex)
            {
            }

上記のコードは機能しています。しかし、キャッチブロックに行き、エラーを表示します:

"[System.Threading.ThreadAbortException] = {Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}"

response.End(); 行をこの行に置き換えました

HttpContext.Current.ApplicationInstance.CompleteRequest();

PDF をダウンロードしていますが、PDF を開くことができません。PDF iam を開いているときにエラーが発生します。

"there was an error opening this document. the file is damaged and could not be repaired"

私もresponse.Flush();助けなしで使ってみました:

4

2 に答える 2

0

これが役立つかどうかはわかりませんが、ストリームから PDF ファイルを開くには、次のコードを使用します。これは問題なく動作し、例外は発生しません。私はデータベースからpdfを取得します.pdfファイルの場合、addHeaderは使用しません。お役に立てば幸いです。

Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
var abyt = (Byte[]) ds.Tables[0].Rows[0]["blob"];
Response.BinaryWrite(abyt);
Response.Flush();
Response.Close();
于 2013-10-25T06:10:20.333 に答える