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;
}
}
あなたはクロームで、他のPDFファイルを閲覧することができますか? –
@ M.Babcock - Google Chromeの設定はほとんどデフォルトになっており、他のPDFファイルを自分のPDFビューアで開きます。 –