2011-10-26 3 views
4

私は、スプリングCommonsMultipartResolverを使用してイメージサイズを制限しようとしています。問題は、アップロード時にすぐに「ファイルサイズの例外」がスローされますが、アップロードは(フォーム上でPOSTを行うという性質上)最後まで続きます。だから、私はディスク上の一時ファイルを保存し、サイズを確認してから、ユーザーに、そしてその余分な帯域幅/リソースを浪費することの上に検証エラーメッセージを表示することになります。アップロードファイルのサイズが制限を超えた場合にフォーム提出をキャンセルするにはどうすればよいですか?

指定された画像サイズに達したときにフォーム送信をキャンセルすることで問題を解決する方法はありますか?

答えて

2

これは、クライアント側でチェックすることによってのみ可能です。新しいHTML5 File APIでこれを行うことができます。これは、サイズをバイトで返すa size propertyを提供します。これをHTML4で実現する方法はありません(IE特有のActiveX機能を期待しているかもしれません)。 HTML5はFF> = 3.6、Chrome> = 2、Safari> = 4でサポートされています(IEではなく、まだIE9ではありません)。いずれにせよ、サポートしていないブラウザのフォールバックだけでなく、エンドユーザーがJSコードを無効にするか、またはハックする場合にも、ファイルサイズをチェックするためにサーバーサイドコードを保持する必要があります。ここ

キックオフ例は次のとおり

function checkSize(input) { 
    if (input.files && input.files[0].size > (10 * 1024)) { 
     alert("File too large. Max 10KB allowed."); 
     input.value = null; 
    } 
} 

<input type="file" onchange="checkSize(this)" /> 

はい、input.filesが配列です。 HTML5以降<input type="file">multiple属性で複数のファイルを選択できます。

関連する問題