0

Jqueryを使用してPHPサーバーにPUTリクエストを使用してCHUNKSにファイルをアップロードしようとしています。チャンク ファイルをアップロードできるコードを作成しました。しかし、「php://input」を使用して読み込もうとすると、何か奇妙なことが起こっています

<?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);
?>

ここでは、各チャンクを 1 つずつ送信し、コードがそのチャンクをファイルに書き込むのを待っているときに、ファイルをチャンクで正常にアップロードできます。

しかし、同時アップロードを行うと(最初のチャンクがファイルに書き込まれるのを待たないでください)..「php://input」のデータは次のリクエストによって上書きされたようです。

私はjavascriptをダブルチェックしました。したがって、問題はphpの最後にある「CHUNKSをどのように読むべきですか?」です。

次のリンクと他のいくつかのリンクを調べました: http://php.net/manual/en/features.file-upload.put-method.php

複数のリクエストを同時に受け取ったときに php://input がどのように機能するかを理解するのを手伝ってもらえますか..データが上書きされるか、データがSTDINでキューに入れられますか?

4

2 に答える 2

0

複数の Uploads を JS-Objects の 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");
    }
}
于 2014-07-28T07:11:19.503 に答える