使用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中被排队?

+0

你好Kunal ...这听起来对我来说真的很奇怪。 Regulary STDIN不应该在多个请求之间共享(因为这会导致完全混淆) – hek2mgl 2013-05-11 18:40:29

在编写之前,请使用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"); 
    } 
}