use*_*552 9 php put stream boundary
所以我希望用户能够上传大文件而不必担心发布最大大小值.另一种方法是使用PUT并将文件作为原始数据发送.使用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',
});
Run Code Online (Sandbox Code Playgroud)
在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");
Run Code Online (Sandbox Code Playgroud)
我没做:
$client_data = file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)
因为将整个文件放入变量肯定会在上传大文件时填满所有内存.
我无法弄清楚的是如何在没有表格边界的情况下编写文件数据.现在它在文件的顶部写这样的东西:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG
Content-Disposition: form-data; name="file-0"; filename="somename.pdf"
Content-Type: application/pdf
Run Code Online (Sandbox Code Playgroud)
在底部是这样的:
------WebKitFormBoundaryVz0ZGHLGxBOCUVQG--
Run Code Online (Sandbox Code Playgroud)
所以我需要解析数据.但为此,我需要将整个数据流读入内存,并且使用大型视频文件我不想这样做.我确实读过一些关于创建一个php://临时流的内容.但是没有运气.如何在没有边界标题的情况下将内容写入文件?没有先将所有数据泵入变量?
fgets也许是停止阅读换行符并检查边界的组合:
while($kb = fgets($s, 1024))
{
if(strpos($kb, '------') === false) //or !== 0 for first position
{
fwrite($f, $kb, 1024);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
941 次 |
| 最近记录: |