1

私は ASP.NET Web アプリケーション (WebForms を使用) を持っており、 Uploadifyを使用して大きなファイルのアップロードを処理しています。これは、ファイルを HttpHandler にポストすることによって行われます。

コードの例 (デモンストレーションのために単純化されています):

$(".uploadify").uploadify({
    'uploader': '/uploadify/uploadify.swf',
    'script': 'SaveUploadedFile.ashx',
    'cancelImg': '/uploadify/cancel.png',
    'queueID': 'fileQueue',
    'auto': true,
    'multi': false,
    'method': 'post',
    onSelect: function(e, queueId, file) {
        alert(file.name + " selected");
    },
    onComplete: function(e, queueId, file, response, data) {
        alert("complete: " + response);
    },
    onCancel: function(e, queueId, file, data) {
        alert("cancel");
    }
});

ファイルを受け取る HttpHandler はかなり単純です。

public void ProcessRequest(HttpContext context)
{
    Debug.WriteLine("Save file");

    if (context.Request.Files.Count == 0)
        throw new SystemException("No files uploaded");

    // Get the file
    HttpPostedFile file = context.Request.Files.Get(0);
    Debug.WriteLine("Got file: " + file.FileName + ", Length: " + file.ContentLength);

    // Save it
    string guid = Guid.NewGuid().ToString();
    string path = Path.Combine(Path.GetTempPath(), guid + ".tmp");
    file.SaveAs(path);
    Debug.WriteLine("Saved to path: " + path);

    // Update response and return guid
    context.Response.StatusCode = 200;
    context.Response.Write(guid);

    Debug.WriteLine("All Done");
}

問題は、表示されているプログレス バーが実際にはアップロードの進行状況を反映しておらず、ファイルが実際にアップロードされるずっと前にアップロードが完了したと表示されることです。したがって、ファイルが完成するまで進行状況バーが 100% のままである間、ユーザー インターフェイスは効果的に何もしていないように見えます。

場合によっては、アップロードが 100% に達した後に単純に失敗し、OnComplete イベントが発生せず、ファイルが保存されているにもかかわらず、転送中に HttpHandler からの応答が失われるようになります。

FlajaxianSWFUploadの両方を試しましたが、進行状況バーが実際のアップロードの進行状況と完全に同期していないという同様の問題が発生し、アップロードが実際に完了する前に完了を示していました。

この問題は、ローカルでテストする場合、または小さなファイル (通常は数メガバイト未満) でテストする場合には明らかではありません。これらのファイルはかなり高速にアップロードされる傾向があり、ファイルのアップロードと進行状況バーの完了の間にほとんどまたはまったく遅延がないためです。

ASP.NET Web アプリケーションで Flash アップロード ソリューション (Uploadify など) を使用し、アップロードの実際の進行状況を進行状況バーでより適切に表す方法はありますか?

更新:最終的に、Flash ベースのアップローダの使用をあきらめました。特に、アップロードの実際の進行状況をまったく表していないプログレス バーが少しぎこちないように思えたからです。これをBrettle NeatUploadに置き換えた方がはるかにうまく機能します。

4

0 に答える 0