10

ASP.NET MVC(C#)アプリケーションはUploadifyを使用して、SDK for.NETを使用してAmazonS3にファイルをアップロードしていますが、アップロードの進行状況が正しく表示されません。

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

プログレスバーが期待どおりに更新されないのはなぜですか?

4

3 に答える 3

2

基本的に、2つのアップロードが発生しています。1回はWebページからサーバーに、もう1回はサーバーからクラウドに。

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

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

于 2012-06-17T03:30:39.787 に答える
0

通常、状態プロバイダーで進行状況の状態を更新する時間を設定できる構成セクションがあります。あなたの場合、そのようなものがあるに違いないと思います。

NeatUpload では、この構成は によって設定されstateMergeIntervalSecondsます。これが助けになることを願っています。

于 2012-05-28T16:13:54.837 に答える
0

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

于 2012-05-22T13:12:59.470 に答える