所以我希望用戶能夠上傳大文件而不必擔心後期最大大小值。 另一種方法是使用PUT並將文件作爲原始數據發送。由於把整個文件到一個變量形式邊界和編寫php://輸入到php中的文件
$client_data = file_get_contents("php://input");
: 當使用jQuery我可以這樣做:
var data = new FormData();
jQuery.each($('#file_upload')[0].files, function(i, file) {
data.append('file-'+i, file);
});
$.ajax({
url: 'upload.php?filename=test.pdf',
data: data,
cache: false,
contentType: false,
processData: false,
type: 'PUT',
});
在PHP中我可以這樣做:
$f = fopen($_GET['filename'], "w");
$s = fopen("php://input", "r");
while($kb = fread($s, 1024))
{
fwrite($f, $kb, 1024);
}
fclose($f);
fclose($s);
Header("HTTP/1.1 201 Created");
我沒有做上傳大文件時肯定會填滿所有內存。
我無法弄清楚的是如何在沒有窗體邊界的情況下編寫文件數據。 現在它寫在文件是這樣的頂部:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG
Content-Disposition: form-data; name="file-0"; filename="somename.pdf"
Content-Type: application/pdf
,並在底部是這樣的:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG--
所以我需要解析的數據。但爲此,我需要將整個數據流讀入內存,並且我不想那麼做。 我沒有讀過關於創建一個php:// temp流的信息。但沒有運氣,但與此。 如何在沒有邊界頭的情況下將內容寫入文件?沒有首先將所有數據抽入變量?
你能否提供'Content-Type'頭文件? –