繁体   English   中英

XMLHttpRequest将.PDF发送到PHP并保存在服务器上会导致一些数据损坏

[英]XMLHttpRequest sending .PDF to PHP and saving on server, results in some data corruption

我有一个blob形式的pdf文件,我正在尝试发送到php以将其保存在我的网络服务器本地。 目前,如果我使用saveAs()在本地保存pdf,则pdf是可读且未损坏的。 但是,一旦数据以formdata的形式发送到我的php脚本,它就会保存在更大的文件大小中,这会丢失数据,最终无法在adobe reader中打开。

我把两个pdf差异化了,你可以看到certian字符没有被复制过来。

差异的PDF,左边是PDF,右边是损坏的

我正在使用FileReader读取blob,并在结果中附加formdata。 然后我使用XMLHttpRequest将数据发送到我的pdf,在那里它写入文件。

我认为这是一个编码错误,但我对文件如何编码以完成我自己的受过教育的调查还不够了解。

 function transferData(){              
            var data = new FormData();
            var reader = new FileReader();
            reader.readAsBinaryString(blobHolder);
            reader.addEventListener('loadend',
                    function(){
                    data.append("data" , reader.result);
                    var xhr2 = new XMLHttpRequest();
                    xhr2.open( 'post', 'php/savefile.php', true );
                    xhr2.send(data);
            });
      }
<?php

if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = "serverGeneratedPDF.pdf";

$file = fopen("../upload/" .$fname, 'w+');
fwrite($file, $data);
fclose($file);
}

?>

想要用我的工作方式更新这个问题。

我最终将整个blob对象作为formData发送,而不是使用FileReader。 在我的PHP文件中,我然后使用了file_get_contents()函数,最终保存了这一天。 它能够从发送的blob中提取出来的“数据”!

更新的代码:

JS:

 function transferData(){              
                    var data = new FormData();
                    data.append('sentBlob', blobHolder);
                    var xhr2 = new XMLHttpRequest();
                    xhr2.open( 'post', 'php/savefile.php', true );
                    xhr2.send(data);
              }

PHP:

<?php

$data = file_get_contents($_FILES['sentBlob']['tmp_name']);
$fname = "serverGeneratedPDF.pdf";

$file = fopen("../upload/" .$fname, 'wb');//creates new file
fwrite($file, $data);
fclose($file);

?>

我的“啊哈”时刻正在弄清楚两件事:

  1. 我的blob发送到$ _FILES var而不是$ _POST
  2. 一旦php处理了blob,使用'$ _FILES [] ['tmp_name']'最终是从blob中获取原始二进制数据的方法(花了我几天才到达这一点)

希望这有助于某人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM