我需要將客戶第三方網站的文件(.zip)傳輸到我的。使用Greasemonkey和PHP下載並上傳
GM-片段(註釋等改掉)
GM_xmlhttpRequest({
method: "GET",
url: dlurl,
timeout:0,
onload: function(resp) {
var conti=resp.responseText;
alert("goup");
GM_xmlhttpRequest({
method: "POST",
url: "http://absolut-fair.com/wbb_back/api.php?id=3",
overrideMimeType: 'text/plain; charset=x-user-defined',
data:"chk=1&data="+base64_encode(conti),
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload: function(resp) {
var conti=resp.responseText;
if(conti=="1") alert("upload erfolgreich");
else alert(conti);
//....
PHP-片段
$name="test.txt";
uploadfile(base64_decode($_POST["data"]),detect_mime($name),$name);
問題
所有解碼的文件已損壞時,我嘗試打開它們。 問題是發送二進制數據。發送原始文本工作正常!
//更新
我剛剛下載的健康和無效的zip文件,它似乎是無效的一個處理大量的空間填充無用的代碼段。 所以我覺得base64不能完全編碼/解碼二進制數據。任何人有任何知識?
我附上了一個源代碼的截圖,使其清晰!
有效文件:
無效之一:
_POST數據有一個大小限制。你應該做的就是上傳文件,像普通的HTTP上傳,然後使用_FILES – Michael
在php中訪問文件。詢問前請查看問題和支持的代碼。 //編輯:我不能自動通過JS/GM下載文件,否則我已經這樣做了。 –
我在說的是POST數據保存在網絡服務器上的內存中,直到收到整個請求,而文件上傳(multipart/form-data)通常緩存到磁盤。您當前的代碼適用於較小的文件,但對於較大的文件,它可能會耗盡內存或超出請求限制。 – Michael