Как скачать файл из генератора PDF-файлов в локальный клиент в Go и React

я создаю сервис для создания PDF-файла с go-wkhtmltopdf

это функция

func Pdf() func(c *gin.Context) {
    return func(c *gin.Context) {
        // download wkhtmltopdf and set that wkhtmltopdf on below
        wkhtmltopdf.SetPath("/usr/local/bin/wkhtmltopdf")
        type ReqHtml struct {
            Html string `json:"html"`
        }
        var html ReqHtml
        _ = c.BindJSON(&html)

        pdfg, err := wkhtmltopdf.NewPDFGenerator()
        if err != nil {
            log.Fatal(err)
        }

        page := wkhtmltopdf.NewPageReader(strings.NewReader(html.Html))
        pdfg.Orientation.Set(wkhtmltopdf.OrientationPortrait)
        page.FooterRight.Set("[page]")
        page.FooterFontSize.Set(10)

        pdfg.AddPage(page)

        err = pdfg.Create()
        if err != nil {
            log.Println(err)
        }
        err = pdfg.WriteFile("./myPdf.pdf")
        if err != nil {
            log.Fatal(err)
        }

    }
}

этот Writefile записывает файл на сервер корневых папок, как заставить клиента загрузить его?

скажем, у меня есть <button> download file </button>

я должен дать ответ клиенту с буфером этого результата? или что?

Всего 1 ответ


Просто отправьте буфер клиенту и используйте эту функцию для загрузки файла (пример кода React):

prepareDocForDownload = result => {
    const length = Object.entries(result.data).length;
    let bytes = new Uint8Array(length);

    for (let i=0; i<length; i++) {
      bytes[i] = result.data[i];
    }

    const file = new Blob(
      [bytes.buffer],
      {type: 'application/pdf'});

    const fileURL = URL.createObjectURL(file);

    const link = document.createElement('a');
    link.href = fileURL;
    link.setAttribute('download', 'file.pdf');
    document.body.appendChild(link);
    link.click();
  };

Есть идеи?

10000