2012-01-05 9 views
0

PDFファイルを配信するためのASMXスタイルの呼び出しを使用してWebサービスを作成しました。このサービスは、POST操作として送信されたデータを処理し、応答にデータを書き込み、ヘッダーに新しいMIMEタイプを追加した後にデータを戻します。Google ChromeへのPDFファイルの配信

PDFファイルは、AlivePDFを使用するフレックスアプリケーションでクライアント側で生成されます。

しばらくの間うまくいきましたが、最近Google chromeで失敗し始めました。新しいウィンドウまたはPDFビューア(ブラウザの設定によって異なる)でPDFを開く代わりに、クロムは単に空のページを表示します。

入力ストリームに有効なPDFデータが渡された場合、このコードがPDFを開くことができない理由はありますか?

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService] 
public class Print : System.Web.Services.WebService 
{ 


    [WebMethod] 
    public string PrintPDF() 
    { 
     HttpRequest request = HttpContext.Current.Request; 
     HttpResponse response = HttpContext.Current.Response; 
     string requestMethod = request.Params["method"]; 
     string requestFilename = request.Params["name"]; 

     if(!validateRequest(request)) 
     { 
      throw new ArgumentException(String.Format("Error downloading file named '{0}' using disposition '{1}'", requestFilename, requestMethod)); 
     } 
     response.AddHeader("Content-Disposition", "attachment; filename=\"" + requestFilename + "\""); 
     byte[] pdf = new byte[request.InputStream.Length]; 
     request.InputStream.Read(pdf, 0, (int)request.InputStream.Length); 
     response.ContentType = "application/pdf"; 
     response.OutputStream.Write(pdf, 0, (int)request.InputStream.Length); 
     response.Flush(); 
     response.End(); 
     return "Fail"; 
    } 

    private bool validateRequest(HttpRequest request) 
    { 
     string requestMethod = request.Params["method"]; 
     string requestFilename = request.Params["name"]; 

     Regex cleanFileName = new Regex("[a-zA-Z0-9\\._-]{1, 255}\\.[a-zA-Z0-9]{1, 3}"); 
     return (requestMethod == "attachment" || requestMethod == "inline") && 
       cleanFileName.Match(requestFilename) != null; 
    } 
} 
+1

あなたはクロームで、他のPDFファイルを閲覧することができますか? –

+0

@ M.Babcock - Google Chromeの設定はほとんどデフォルトになっており、他のPDFファイルを自分のPDFビューアで開きます。 –

答えて

1

これはChromeの一般的な問題です。それはクロムの自家製のpdfビューアが本当に不安定であることと関係しています。

これでディスプレイの問題は解決しませんが、アクセシビリティの問題を修正してダウンロードを強制することができます。

<a href="http://www.domain.com/painful.pdf">Broken</a>
<a href="http://www.domain.com/painful.pdf" download="notsopainful">Works</a>

関連する問題