4

PhantomJS で生成されたファイルを asp.net アプリケーションにダウンロードする際に問題が発生しています。ファントム Js をサーバーとして実行しています。ファイルは正しく生成され、PhantomJS フォルダーのディスクに保存されますが、転送中に何かが発生し、HTTP 応答ストリームに含められます。ファイルはブラウザによってダウンロードされますが、開こうとすると、ファイルを開くことができないというメッセージが表示されてエラーになります。ストリーム転送で破損したと思われますか?

ファイルシステムに保存されている場所からpdfを読み取ることを避け、代わりにPhantomJSから返された応答から取得したいと思います

PhantomJS コード:

page.open(url, function (status) {

    page.render(fullFileName);

    var fs = require('fs');

    var pdfContent = fs.read(fullFileName);
    response.statusCode = 200;
    response.headers = {
                    'Cache': 'no-cache',
                    'Content-Type': 'application/pdf',
                    'Connection': 'Keep-Alive',
                    'Content-Length': pdfContent.length
                    };

     response.setEncoding("binary");
     response.write(pdfContent);


});

ASP.NET コード:

public ActionResult DownloadPdfFromUrl(ConvertionModel model)
    {
        HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create("http://localhost:8080");

        ASCIIEncoding encoding = new ASCIIEncoding();
        string postData = string.Format("url={0}&fileName=myTest&extension=pdf&format=pdf", model.UrlToConvertPdf);
        byte[] data = encoding.GetBytes(postData);

        httpWReq.Method = "POST";
        httpWReq.ContentType = "application/x-www-form-urlencoded";
        httpWReq.ContentLength = data.Length;

        using (Stream s = httpWReq.GetRequestStream())
        {
            s.Write(data, 0, data.Length);
        }

        var response = (HttpWebResponse)httpWReq.GetResponse();

        Response.AppendHeader("Content-Disposition", "attachment;filename=test.pdf");

        return new FileStreamResult(response.GetResponseStream(), "application/pdf");
    }
4

1 に答える 1