2012-10-22 7 views
10

現在のところ、私はsocket.ioを使用してプログレスバー付きのビデオをアップロードしています。ここでは、チュートリアルエクスプレスで大きなファイルをプログレスバーにアップロードする方法は?

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-resumable-video-uploade-in-node-js/

ですが、Internet Explorerは、このメソッドをサポートしていませんが、私は本当にすべてのブラウザで動画をアップロードする必要があります。

私はエクスプレスドキュメントを確認しました。 expressはnode-formidable(進捗状況があります)に基づいているので、プログレスバーを使ってアップロードシステムを構築する方法があると思います。私はちょうど方法を知らない!

node-formidable IEは有効になっていますか?

プログレスバーを使用して純粋なespress.jsでファイルアップロードシステムを構築することは可能ですか?

答えて

1

これは、xhr.upload進行状況イベントで実行できます。これはhtml5からサポートされています。例えば

https://github.com/zeMirco/express-upload-progress

PHPでアップロード情報がセッションに取り付けることができるので、それはHTML4で動作し、多分そのためnodejs延長もあり、私はそれをグーグルます。

は、これによると: How to do upload with express in node.js ファイルのアップロードにより、急行でprogressイベントがありますので、あなたは、実際の進捗データとのセッションで変数を設定し、クライアント側からAJAXでそれを読むことができます。

1

ここには、角度jsとng-file-upload指示文を使用したjsfiddleがあります。

jsfiddleは画像とファイルで動作しますが、動画をアップロードするにはPOST URLをあなたのサーバに変更してください。

//inject angular file upload directives and services. 
 
var app = angular.module('fileUpload', ['ngFileUpload']); 
 

 
app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function($scope, Upload, $timeout) { 
 
    $scope.uploadFiles = function(file, errFiles) { 
 
    $scope.f = file; 
 
    $scope.errFile = errFiles && errFiles[0]; 
 
    if (file) { 
 
     file.upload = Upload.upload({ 
 
     url: 'https://angular-file-upload-cors-srv.appspot.com/upload', 
 
     data: { 
 
      file: file 
 
     } 
 
     }); 
 

 
     file.upload.then(function(response) { 
 
     $timeout(function() { 
 
      file.result = response.data; 
 
     }); 
 
     }, function(response) { 
 
     if (response.status > 0) 
 
      $scope.errorMsg = response.status + ': ' + response.data; 
 
     }, function(evt) { 
 
     file.progress = Math.min(100, parseInt(100.0 * 
 
      evt.loaded/evt.total)); 
 
     }); 
 
    } 
 
    } 
 
}]);
.thumb { 
 
    width: 24px; 
 
    height: 24px; 
 
    float: none; 
 
    position: relative; 
 
    top: 7px; 
 
} 
 

 
form .progress { 
 
    line-height: 15px; 
 
} 
 

 
.progress { 
 
    display: inline-block; 
 
    width: 100px; 
 
    border: 3px groove #CCC; 
 
} 
 

 
.progress div { 
 
    font-size: smaller; 
 
    background: orange; 
 
    width: 0; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="https://angular-file-upload.appspot.com/js/ng-file-upload-shim.js"></script> 
 
<script src="https://angular-file-upload.appspot.com/js/ng-file-upload.js"></script> 
 

 

 
<body ng-app="fileUpload" ng-controller="MyCtrl"> 
 
    <h4>Upload on file select</h4> 
 
    <button type="file" ngf-select="uploadFiles($file, $invalidFiles)" ngf-max-height="1000" ngf-max-size="100MB"> 
 
    Select File</button> 
 
    <br> 
 
    <br> File: 
 
    <div style="font:smaller">{{f.name}} {{errFile.name}} {{errFile.$error}} {{errFile.$errorParam}} 
 
    <span class="progress" ng-show="f.progress >= 0"> 
 
      <div style="width:{{f.progress}}%" 
 
       ng-bind="f.progress + '%'"></div> 
 
     </span> 
 
    </div> 
 
    {{errorMsg}} 
 
</body>

関連する問題