その単純さから、gwtuploadを使用します。
複数のファイルをアップロードする場合は、クライアント側で Multiuploader を使用します。
public void onModuleLoad() {
MultiUploader uploader = new MultiUploader();
RootPanel.get().add(uploader);
uploader.addOnFinishUploadHandler(new IUploader.OnFinishUploaderHandler() {
public void onFinish(IUploader uploader) {
if (uploader.getStatus() == Status.SUCCESS) {
UploadedInfo info = uploader.getServerInfo();
System.out.println("File name " + info.name);
System.out.println("File content-type " + info.ctype);
System.out.println("File size " + info.size);
}
}
});
}
UploadAction
サーバー側では、ライブラリで提供されているサーブレットをオーバーライドするだけです。
編集: メソッドは のリストを受け取ることに注意してくださいFileItem
。各 FileItem は、アップロードされたファイルの一時的な情報とコンテンツですが、実際の Java ではありませんFile
。ここにビジネス コードを配置して、独自のdirs
構造を作成したり、それらを処理したり、さらには ddbb に BLOB フィールドとして保存したりします。この場合、すべてのファイルを取得して一時フォルダーに保存します (このフォルダーは、Linux、Windows などでは異なることに注意してください)。
public class SampleUploadServlet extends UploadAction {
@Override
public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException {
String response = "";
for (FileItem item : sessionFiles) {
if ( ! item.isFormField()) {
try {
File file = File.createTempFile("upload-", ".bin");
item.write(file);
/// Send a customized message to the client.
response += file.getAbsolutePath() + "\n";
} catch (Exception e) {
throw new UploadActionException(e);
}
}
}
/// Remove files from session because we have a copy of them
removeSessionFileItems(request);
/// Send your customized message to the client.
return response;
}
}
サーブレットがすでにマルチパート リクエストを処理している場合、プログレス バーやファイル チューザ スタイルなどを見逃すことはありますが、GWT uisngFileUpload
およびで標準的な方法を使用できます。FormPanel
// Add a form-panel to your document
final FormPanel form = new FormPanel();
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
form.setAction("your_upload_servlet_url");
RootPanel.get().add(form);
// Add a file-upload to your form
FileUpload fu = new FileUpload();
form.add(fu);
// submit your form when the user selects a file
fu.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
form.submit();
}
});