将压缩的 PDF 文件内容从客户端发送到后端服务器

Posted

技术标签:

【中文标题】将压缩的 PDF 文件内容从客户端发送到后端服务器【英文标题】:Send compressed PDF file contents from client side to backend server 【发布时间】:2020-07-28 10:53:03 【问题描述】:

我正在使用ilovepdf 来压缩在客户端上传的 pdf 文件。我得到压缩文件内容作为响应。

理想情况下我想要的是 -:

在客户端制作一个文件(PDF),文件内容收到响应。 将文档附加到文件上传 DOM 元素。 将文件提交到后端。

但看起来禁止在客户端(浏览器)读取/写入包含内容的文件。所以以上无法实现。 我还尝试仅将 压缩文件内容 附加到 DOM 元素并使用 formdata 提交到后端,但是,当我使用后端收到的内容保存文件时,我发现文件已损坏或无法打开。 p>

触发以下代码从 ilovepdf 服务器下载并上传到我的服务器。

function downloadPDF() 
  $.ajax(
    type: 'GET',
    headers: 
      'Authorization': 'Bearer ' + token
    ,
    url: "https://" + server + "/v1/download/" + task,
    success: function(response) 
      var form = new FormData();
      form.append("file", response);
      $.ajax(
        type: 'POST',
        url: "/properties/compressed",
        processData: false,
        contentType: false,
        data: form,
        success: function(response) 
          console.log("sent to server")
        
      );
    
  );

【问题讨论】:

1) 使用JSPDF 2 & 3) 创建FormData 对象和upload the PDF file using AJAX。您必须为此使用 AJAX,因为出于安全原因,您无法将数据附加到文件输入控件。您可以对 PDF 文件进行 base64 编码并将其发送到隐藏的输入中,但这很丑陋,并且需要您在服务器上接收到文件数据时重新构建它。 尝试使用formdata并使用ajax上传,仍然有损坏的pdf文件。 那么请出示您的代码,以便我们帮助您调试 在问题中编辑和添加代码 那是你的编辑。 form.append("file", response); 行中的 response 是什么?我想这是“ilovepdf”的解压缩输出?如果是压缩文件,那就是问题所在。 【参考方案1】:

您可以使用 wicked_pdf gem 从您的服务器生成 PDF,并在 base64 中对其进行编码,然后将 base64 编码的字符串返回给客户端服务器,在您的客户端服务器上,您可以使用此代码下载PDF:

window.downloadPDF = function downloadPDF() 

    var dlnk = document.getElementById('dwnldLnk');
    dlnk.href = pdf; <this would be your return encoded string in response>

    dlnk.click();


    alert('toma');

【讨论】:

以上是关于将压缩的 PDF 文件内容从客户端发送到后端服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何将交易从元掩码钱包发送到后端节点 js

想要从 React UI 上传 zip 文件夹并将其发送到后端节点 js 服务器,我可以从那里将该文件夹放置在我系统上的某个路径中

将用户名和密码从移动/网络应用程序的每个请求发送到后端 api 是否一个坏主意

如何将 iso 8601 日期发送到后端?

当用户单击链接时,如何通过请求将身份验证令牌从本地存储发送到后端

在将其发送到 Cloudinary 之前进行 Base64 图像压缩