1

サーブレット ファイルにアップロード コンポーネントを実装したいのですが、うまくいきません。コードのエピソードは次のようです。

SmartUpload smartUpload=new SmartUpload();
StringBuffer stringBuffer=new StringBuffer();
smartUpload.initialize(config,request, response);
try {
     smartUpload.upload();
 File file=smartUpload.getFiles().getFile(0);
 stringBuffer.append(file.getFileName());
 file.saveAs("/upload_resources/"+stringBuffer);
} catch (SmartUploadException e) {
 e.printStackTrace();
}

upload_resource ディレクトリは WebRoot ディレクトリのすぐ下にあり、コードはエラーなしで実行されますが、ファイルはアップロードされません。ちなみに私も改行しました

file.saveAs("/upload_resources/"+stringBuffer);

file.saveAs(request.getRealPath("/upload_resources/")+"/"+stringBuffer);

つまり、絶対パスを使用する場合、ファイルはアップロードされません。どんな助けでも感謝します。ありがとう。

4

1 に答える 1

0

私は SmartUpload を実際に使用したことはありませんが、アップロードされたファイルを webapp の deploy フォルダーに保存するべきではないことはわかります。アップロードされたファイルが元の WAR ファイルに含まれていないという単純な理由で webapp が再デプロイされるたびに、それらはすべて失われる可能性があります。そのため、webapp の deploy フォルダーにアップロード フォルダーを用意するのではなく、deploy フォルダーの外側の固定パスにアップロード フォルダーを用意する必要があります。

SmartUpload が適切に設計されている場合、私はそれを期待します

file.saveAs("/upload_resources/"+stringBuffer);

/uploaded_resourcesWebサーバーが起動された場所と同じディスクのルート上のフォルダーに保存されます。たとえば、Windows ではC:\uploaded_resources. 代わりにそのフォルダーを準備して使用します。

さらに、MSIE ブラウザーを使用している場合、別の潜在的な問題があります。つまり、このブラウザは、ファイル名にクライアント側の完全なパスを誤って含めています。SmartUpload がこれを適切に処理するかどうかはわかりませんが、 の実際の値をデバッグして、実際file.getFileName()filename.ext. String#substring()それ以外の場合は、最後の/andの後の部分を部分文字列にするために使用する必要があります\

于 2012-05-31T12:53:31.760 に答える