2017-08-26 1 views
1

アップロード可能なアップロードモードのng-file-uploadを実装して、大きなファイルを分割してアップロードした後にマージします。私は多くのプロジェクトでng-file-uploadを実装しましたが、これは大きなファイルをアップロードするのに初めてのことです。ng-file-upload + PHP(マージパート)を使用した再開アップロード

私の問題は、PHPでサーバー側のファイルを動作させる方法がわかりません。私はちょうどdiferents名前のチャンクをアップロードする必要がありますが、私はそれらをマージすることはできません。

誰かがこの機能を動作させるためにPHPでサーバーサイドコードの例を投稿できますか?

これは私がここまでやっていることである。これまでのところ

AngularJS

$scope.uploadMediaFile = function (file) { 

     if(file) { 

      Upload.upload({ 
       ignoreLoadingBar: true, 
       url: 'app/api/upload/mediaFile.php', 
       resumeChunkSize: '1MB', 
       file: file 
      }).then(function (response) { 
       if(response.data.success) { 
        $scope.post.mediaFile = response.data.filename; 
        $scope.post.duration = response.data.duration; 
       } else { 
        console.error(response.data.error); 
       } 
      }, null, function (evt) { 
       console.log(part); 
       file.progress = Math.min(100, parseInt(100.0 * evt.loaded/evt.total)); 
      }); 
     } 
    }; 

mediaFile.php

$filename = $_FILES['file']['name']; 
$file_tmp = $_FILES['file']['tmp_name']; 

$file_ext = pathinfo($filename, PATHINFO_EXTENSION); 

$file_des = $_SERVER['DOCUMENT_ROOT'] . '/storage/content/temp/'; 

if(!file_exists($file_des)) mkdir($file_des); 

// Puting a diferent name for each file part 
$new_filename = uniqid() . "." . pathinfo($filename, PATHINFO_EXTENSION); 

move_uploaded_file($file_tmp, $file_des . $new_filename) 

、私はdiferent名と同じファイルの多くの部分を取得します。

答えて

1

誰かが同様の質問をしている場合は、私の解決策を投稿します。

<?php 
// File chunk 
$filename = $_FILES['file']['name']; 
$file_tmp = $_FILES['file']['tmp_name']; 


// Defining temporary directory 

$file_des = $_SERVER['DOCUMENT_ROOT'] . '/storage/content/temp/'; 

// If not exists, create temp dir. 
if(!file_exists($file_des)) mkdir($file_des); 

// The first chunk have the original name of file uploaded 
// so, if it exists in temp dir, upload the other pieces 
// with anothers uniques names 
if(file_exists($file_des . $filename)) { 

    $new_name = uniqid() . "." . pathinfo($filename, PATHINFO_EXTENSION); 
    move_uploaded_file($file_tmp, $file_des . $new_name); 

    // Now, append the chunk file to the first base file. 
    $handle = fopen($file_des . $new_name, 'rb'); 
    $buff = fread($handle, filesize($file_des . $new_name)); 
    fclose($handle); 

    $final = fopen($file_des . $filename, 'ab'); 
    $write = fwrite($final, $buff); 
    fclose($final); 

    // Delete chunk 
    unlink($file_des . $new_name); 

} else { 

    /* MAKE SURE WE DELETE THE CONTENT OF THE DESTINATION FOLDER FIRST, 
     OTHERWISE CHUNKS WILL BE APPENDED FOR EVER 
     IN CASE YOU ARE TRYING TO UPLOAD A FILE WITH THE EXACT SAME NAME. 
     CAREFUL: YOU MAY PREFER TO DELETE ONLY THE FILE 
     INSTEAD OF THE FOLDER'S CONTENT, IN THE CASE 
     YOUR FOLDER CONTAINS MORE THAN ONE FILE. 
    */ 

    $files_to_delete = glob($file_des."*"); // get all file names 
    foreach($files_to_delete as $file) // iterate files 
    { 
     if(is_file($file)) 
     { 
     unlink($file); // delete file 
     } 
    } 


    // First chunk of file with original name. 
    move_uploaded_file($file_tmp, $file_des . $filename); 
} 
関連する問題