GWT中的基本文件上传 [英] Basic File upload in GWT
本文介绍了GWT中的基本文件上传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经有了下面的代码,但现在我不知道如何提交我的文件到Google AppServer服务器并将其保存到另一台服务器:
public class FileUploader {
private ControlPanel cp;
private FormPanel form = new FormPanel();
private FileUpload fu = new FileUpload();
public FileUploader(ControlPanel cp){
this.cp = cp;
this.cp.setPrimaryArea(getFileUploaderWidget());
$ b $ @SuppressWarnings(deprecation)
public Widget getFileUploaderWidget(){
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
// form.setAction(/ *我应该放哪里* /)
VerticalPanel holder = new VerticalPanel();
fu.setName(upload);
holder.add(fu);
holder.add(new Button(Submit,new ClickHandler(){
public void onClick(ClickEvent event){
GWT.log(You selected:+ fu.getFilename ),null);
form.submit();
}
}));
$ b form.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event){
if(!。equalsIgnoreCase(fu.getFilename())) {
GWT.log(UPLOADING FILE ????,null);
//现在什么????
}
else {
事件。取消(); //取消事件
}
}
});
$ b $ form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler(){
public void onSubmitComplete(SubmitCompleteEvent event){
Window.alert(event.getResults());
}
});
form.add(持有者);
退货表单;
$ b现在,接下来我需要做什么?我需要在web.xml中放置什么,以及如何编写我的servlet,这样我就可以存储文件并返回该对象的url(如果可能的话)
解决方案这里是我的应用程序的代码:
$ b $ 1创建了一个接受http请求的类:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
$ b $ public class FileUpload extends HttpServlet {$ b $ public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
ServletFileUpload upload = new ServletFileUpload();
尝试{
FileItemIterator iter = upload.getItemIterator(request); (iter.hasNext()){
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
//处理输入流
ByteArrayOutputStream out = new ByteArrayOutputStream();
int len;
byte [] buffer = new byte [8192]; ((len = stream.read(buffer,0,buffer.length))!= -1){
out.write(buffer,0,len);
}
int maxFileSize = 10 *(1024 * 1024);如果(out.size()> maxFileSize){
throw new RuntimeException(File is> than+ maxFileSize);
$ b catch(Exception e){
throw new RuntimeException(e);
$ b code
$ b 2)然后在我的web.xml中添加了这些行:
< servlet>
< servlet-name> fileUploaderServlet< / servlet-name>
< servlet-class> com.testapp.server.FileUpload< / servlet-class>
< / servlet>
< servlet-mapping>
< servlet-name> fileUploaderServlet< / servlet-name>
< url-pattern> / testapp / fileupload< / url-pattern>
< / servlet-mapping>
3)而form.action做到了这一点:$ b
$ bform.setAction(GWT.getModuleBaseURL()+fileupload);
I'm trying to figure out how to upload one file using GWTs FileUpload widget. I'm using GWT and Google AppEngine with Java but I would like to upload file to my own Linux server. I have the following code already but now I can't figure out how to submit my file to the Google AppServer server and save it to another server:
public class FileUploader{ private ControlPanel cp; private FormPanel form = new FormPanel(); private FileUpload fu = new FileUpload(); public FileUploader(ControlPanel cp) { this.cp = cp; this.cp.setPrimaryArea(getFileUploaderWidget()); } @SuppressWarnings("deprecation") public Widget getFileUploaderWidget() { form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); // form.setAction(/* WHAT SHOULD I PUT HERE */); VerticalPanel holder = new VerticalPanel(); fu.setName("upload"); holder.add(fu); holder.add(new Button("Submit", new ClickHandler() { public void onClick(ClickEvent event) { GWT.log("You selected: " + fu.getFilename(), null); form.submit(); } })); form.addSubmitHandler(new FormPanel.SubmitHandler() { public void onSubmit(SubmitEvent event) { if (!"".equalsIgnoreCase(fu.getFilename())) { GWT.log("UPLOADING FILE????", null); // NOW WHAT???? } else{ event.cancel(); // cancel the event } } }); form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() { public void onSubmitComplete(SubmitCompleteEvent event) { Window.alert(event.getResults()); } }); form.add(holder); return form; } }
Now, what do I need to do next? What do i need to put in web.xml and how do I write my servlet so i can store file and return url of that object (if possible)
解决方案Here's the code from my app:
1) I created a class to accept http request:
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUpload extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletFileUpload upload = new ServletFileUpload(); try{ FileItemIterator iter = upload.getItemIterator(request); while (iter.hasNext()) { FileItemStream item = iter.next(); String name = item.getFieldName(); InputStream stream = item.openStream(); // Process the input stream ByteArrayOutputStream out = new ByteArrayOutputStream(); int len; byte[] buffer = new byte[8192]; while ((len = stream.read(buffer, 0, buffer.length)) != -1) { out.write(buffer, 0, len); } int maxFileSize = 10*(1024*1024); //10 megs max if (out.size() > maxFileSize) { throw new RuntimeException("File is > than " + maxFileSize); } } } catch(Exception e){ throw new RuntimeException(e); } } }
2) Then in my web.xml I've added these lines:
<servlet> <servlet-name>fileUploaderServlet</servlet-name> <servlet-class>com.testapp.server.FileUpload</servlet-class> </servlet> <servlet-mapping> <servlet-name>fileUploaderServlet</servlet-name> <url-pattern>/testapp/fileupload</url-pattern> </servlet-mapping>
3) And for form.action did this:
form.setAction(GWT.getModuleBaseURL()+"fileupload");
这篇关于GWT中的基本文件上传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文