使用PUT请求上传多个文件上传
问题描述:
我想在使用JQUERY的PUT请求到PHP服务器的CHUNKS上传文件。 我已经创建了可以上传块文件的代码。使用PUT请求上传多个文件上传
<?php
$headerArray=getallheaders();
$filename="d/".$headerArray["filename"];
$length=$headerArray["Content-Length"];
/* PUT data comes in on the stdin stream */
echo "filename".$filename;
echo "Chunksize Uploaded:".$length;
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen($filename, "a");
while ($data = fread($putdata, $length))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
echo "FileSize After write : ".filesize($filename);
?>
在这里,我能够成功上传块的文件时,我被一个发送每个块一个,并等待:当我尝试读取使用“//输入PHP”它 但奇怪的事情是happenening代码将该块写入文件。
但是,当我做并发上传(不要等待第一个块被写入文件)..“php://输入”中的数据似乎被下一个请求覆盖。
我有doble检查的JavaScript。所以问题是在PHP结束“我应该怎么读CHUNKS?”。
我已经通过以下链接等几个环节了: http://php.net/manual/en/features.file-upload.put-method.php
有人可以帮助我了解如何PHP://输入工作,当它收到
在同一时间多个请求..没有数据被覆盖或者数据在STDIN中被排队?
答
在编写之前,请使用fseek确保您正在写入文件末尾。
+0
正如你所看到的,我已经使用append模式来写入文件,这将自动寻找文件结尾,然后它会写入它。 – 2013-05-09 18:39:07
答
尝试在JS对象中发送多个上传为Blob-Parts。这需要一个简单的序列化 - 服务器上的算法,Perl的例子:
sub init{
my $self = shift;
# AJAX Response
if($ENV{REQUEST_METHOD} eq 'PUT'){
# Objekte wiederherstellen aus STDIN
binmode STDIN;
my $eav = EAVHandle->handle2eav(*STDIN);
# $eav ermöglicht den wahlfreien Zugriff auf die Einzelteile
# für die DEMO schicken wir die Objekte wieder zurück
$self->{CONTENT} = EAVHandle->eav2str($eav);
$self->header("Content-Type" => "application/octet-stream");
}
}
你好Kunal ...这听起来对我来说真的很奇怪。 Regulary STDIN不应该在多个请求之间共享(因为这会导致完全混淆) – hek2mgl 2013-05-11 18:40:29