2013-05-08 3 views
0

Я пытаюсь загрузить файлы в CHUNKS с помощью запроса PUT с использованием Jquery на PHP-сервер. Я создал код, где я могу загрузить файл chunk. Но что-то странное happenening, когда я пытаюсь читать его с помощью «PHP: // ввод»Загрузка нескольких файлов с использованием запроса 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: // input», похоже, были перезаписаны следующим запросом.

У меня есть проверенный javascript. Итак, проблема в php end «как я должен читать CHUNKS?».

Я прошел через следующую ссылку и несколько других ссылок: http://php.net/manual/en/features.file-upload.put-method.php

Может кто-нибудь помочь мне понять, как PHP: // вход работает, когда он recives несколько запроса в то же время .. делает данные переопределен или данные получают QUEUED в STDIN?

+0

Hello Kunal ... Это звучит очень странно для меня. Регулярный STDIN не должен делиться несколькими запросами (так как это приведет к полной путанице) – hek2mgl

ответ

0

Прежде чем писать, используйте fseek, чтобы убедиться, что вы пишете до конца файла.

+0

Как вы можете видеть, я использовал режим append для записи файлов, который будет атомно искать конец файла, а затем он будет писать на него. –

0

Попробуйте отправить несколько загрузок в виде блоков Blob в JS-объектах. Для этого нужен простой алгоритм serialize-Algorithm на сервере, пример для 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"); 
    } 
} 
Смежные вопросы