私は 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 からの応答が失われるようになります。
FlajaxianとSWFUploadの両方を試しましたが、進行状況バーが実際のアップロードの進行状況と完全に同期していないという同様の問題が発生し、アップロードが実際に完了する前に完了を示していました。
この問題は、ローカルでテストする場合、または小さなファイル (通常は数メガバイト未満) でテストする場合には明らかではありません。これらのファイルはかなり高速にアップロードされる傾向があり、ファイルのアップロードと進行状況バーの完了の間にほとんどまたはまったく遅延がないためです。
ASP.NET Web アプリケーションで Flash アップロード ソリューション (Uploadify など) を使用し、アップロードの実際の進行状況を進行状況バーでより適切に表す方法はありますか?
更新:最終的に、Flash ベースのアップローダの使用をあきらめました。特に、アップロードの実際の進行状況をまったく表していないプログレス バーが少しぎこちないように思えたからです。これをBrettle NeatUploadに置き換えた方がはるかにうまく機能します。