簡體   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