Отправить байтовый массив из кода на вызов ajax - PullRequest
0 голосов
/ 08 октября 2018

У меня есть веб-метод, в котором я конвертирую HTML в PDF, а затем сохраняю его в локальную папку. Я хочу, чтобы пользователь загрузил этот файл без отправки сообщения назад, поэтому я пытаюсь сделать вызов AJAX POSTв веб-метод, чтобы получить байтовый массив и затем преобразовать его в PDF, проблема в том, что я получаю ошибку 500:

{Message: "There was an error processing the request.", StackTrace: "", ExceptionType: ""}

Хотя я знаю, что веб-метод срабатывает, потому что при размещении точек останова егоостанавливается на этом, и я могу увидеть двоичный массив перед возвратом, а также созданный файл в папке, я все еще получаю сообщение об ошибке, вот мой код:

C #:

[WebMethod]
public static byte[] getfile(string one, string two)
{
    HttpContext context = HttpContext.Current;
    HtmlToPdf converter = new HtmlToPdf();

    converter.Options.MinPageLoadTime = 10;
    converter.Options.MaxPageLoadTime = 30;

    PdfDocument doc = converter.ConvertUrl("http://localhost/dashboard_pdf.aspx?one=" + one+ "&" + "two=" + two);

    string appPath = HttpContext.Current.Request.ApplicationPath;
    Random rnd = new Random();
    int num = rnd.Next(1, 1000000);
    string path = context.Server.MapPath(appPath + "/Web/" + num + ".pdf");

    doc.Save(path);   
    doc.Close();

    FileStream stream = File.OpenRead(path);
    byte[] fileBytes = new byte[stream.Length];

    stream.Read(fileBytes, 0, fileBytes.Length);
    stream.Close();

    byte[] b1 = System.IO.File.ReadAllBytes(path);

    return fileBytes;
}

JS:

$.ajax({
    type: "POST",
    url: "dashboard.aspx/getfile",
    contentType: "application/json; charset=utf-8",
    data: "{'one':\"" + one+ "\", 'two':\"" + two + "\" }",
    dataType: "json",
    processData: false,
    success: function (data) {
        data = data.d;

        var byteArray = new Uint8Array(data);
        var a = window.document.createElement('a');

        a.href = window.URL.createObjectURL(new Blob([byteArray], { type: 'application/pdf' }));

        a.download = "Dashboard";

        document.body.appendChild(a)
        a.click();
        document.body.removeChild(a)
    }
});

Есть идеи?

Спасибо.

1 Ответ

0 голосов
/ 09 октября 2018

Я решаю это, добавив это в мой web.config:

 <system.web.extensions>
    <scripting>
      <webServices>
        <!-- Update this value to change the value to a larger value that can accommodate your JSON Strings -->
        <jsonSerialization maxJsonLength="86753090" />
      </webServices>
    </scripting>
  </system.web.extensions>
...