2012-05-18 29 views
10

ASP.NET MVC(C#)アプリケーションがUploadifyを使用してSDK for .NETを使用してAmazon S3にファイルをアップロードしています。SDKおよびUploadifyを使用してAmazon S3にファイルをアップロードすると正しく表示されない

Uploadifyを使用して直接サーバーにファイルをアップロードすると、正常に動作します。ただし、Amazon S3 TransferUtility.Uploadメソッドを使用してファイルをアップロードすると、進行状況バーに100%の完了が素早く表示されますが、UploadifyのonCompleteイベントを取得するまでには長い時間待つ必要があります。私のコードは以下の通りです。

C#コード:

using (transferUtility = new TransferUtility(AWSAccessKey, AWSSecretKey)) 
{ 
    try 
    { 
     TransferUtilityUploadRequest request = new TransferUtilityUploadRequest(); 

     request.WithBucketName(AWSBucket) 
      .WithKey(folderKey) 
      .WithTimeout(5 * 60 * 1000) 
      .WithInputStream(uploadFileStream); 

     request.WithCannedACL(S3CannedACL.PublicRead); 

     transferUtility.Upload(request); 
    }     
    catch (AmazonS3Exception amazonS3Exception) 
    { 
     throw amazonS3Exception; 
    } 
} 

JavaScriptコード:私はそれを期待してるよう

jQuery(document).ready(function() { 
    var allowdfileext='*.doc;*.docx;*.pdf;' 
    var extarray=allowdfileext.split(';'); 

    jQuery('#proposalUploadFile').uploadify({ 
     'uploader': '/Content/uploadify/uploadify.swf', 
     'script': '/File/Upload', 
     'folder': '/uploads', 
     'buttonImg':'/Content/uploadify/upload-file.jpg', 
     'cancelImg': '/Content/uploadify/cancel.png', 
     'auto': true,    
     'height': '25', 
     'width': '95', 
     'wmode':'transparent', 
     'sizeLimit': '20971520', 
     'onComplete': fileUploaded, 
     'multi': false, 
     'scriptData': { 
      'saveToFolder': 'Temp', 
      'fileextension':'*.doc;*.docx;*.pdf;', 
      'subdomain':'qa','saveInLocal':'True' 
     }, 
     'fileExt':'*.doc;*.docx;*.pdf;', 
     'fileDesc':'Files (*.doc;*.docx;*.pdf;)', 
     'onAllComplete': fileUploadCompleted, 
     'onError' : function(event, ID, fileObj, errorObj) { 
      var r = '<br />ERROR: '; 

      switch(errorObj.info) { 
       case 405: 
        r += 'Invalid file type.'; 
        break; 
       case 406: 
        r += 'Some other error.'; 
        break; 
       default: 
        r += 'Some other error.'; 
        break; 
      }  
     } 
    }); 
}); 

なぜ進捗バーが更新されていませんか?

答えて

0

TransferUtilityはサーバー側からswfクライアントにどのように通信しますか?私は、クライアントからサーバーへのアップロードが進行状況バーに反映されると想定します。次に、S3へのサーバ転送は(ローカルファイルへの書き込みよりもはるかに遅い)、クライアント(swf)には報告されません。これは、アップロードが100%に達するまでの遅延を考慮し、ページが応答するまで待つ必要があります。

0

通常、状態プロバイダーの進行状況を更新する時刻を設定できる設定セクションがあります。あなたの場合、私はそのようなものがなければならないと仮定します。

neatUploadでは、この設定はstateMergeIntervalSecondsで設定されています。私はこの助けを願っている。

2

本質的に2つのアップロードが行われています。ウェブページからあなたのサーバーに1回、サーバーからクラウドに1回。

あなたが見ているのは、ウェブページからアップロードハンドラへのアップロードの進捗状況です。ブラウザは、サーバーからS3に送信されるデータではなく、クライアントからサーバーに送信されるデータのみを認識します。

かなり複雑なサーバー作業をせずに、正確なアップロード進捗値を取得することはできません。 S3へのアップロードを処理するバックグラウンドスレッドを起動するか、完全なコールバックが発生するまで100%未満の進捗状況を設定することをお勧めします。

関連する問題