,如何构建一个允许用户将他们的图像上传到Webserver中的文件夹的系统?
问题描述:
在Java Desktop
应用中,我们可以允许用户将文件上传到一个文件夹中的Web服务器,这样的事情,如何构建一个允许用户将他们的图像上传到Webserver中的文件夹的系统?
File rootDir = new File("/home/bala/temp") ;
if(FileUpload.isMultipartContent(request)) {
DiskFileUpload fileUpload = new DiskFileUpload() ;
Iterator iterator = fileUpload.parseRequest(request).iterator() ;
while(iterator.hasNext()) {
FileItem fileItem = (FileItem) iterator.next() ;
File file = new File(rootDir , fileItem.getName()) ;
fileItem.write(file) ; }
}
else { throw new Exception("Invalid request ") ; }
但是,我们如何做到这一点的GWT或GWTP? Gwt是否包含支持此类的任何类?
答
我会使用gwtupload,因为它的简单。
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
的servlet:
在客户端,如果你想上传多个文件使用Multiuploader。
编辑:请注意,该方法收到的列表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;
}
}
如果你的servlet已经处理了多部分请求,您可以使用GWT的标准方式uisng FileUpload
和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();
}
});
请参阅这个答案http://*.com/questions/8441599/gwt-browse-files-directories/8442764#8442764 – Spiff 2013-04-26 06:28:28