GWT FileUpload-Servlet选项和处理响应
我是GWT新手,正在尝试实现文件上传功能。 在internet上找到一些实现帮助,并将其用作参考。 但我有一些与此相关的问题:GWT FileUpload-Servlet选项和处理响应,gwt,servlets,file-upload,form-submit,Gwt,Servlets,File Upload,Form Submit,我是GWT新手,正在尝试实现文件上传功能。 在internet上找到一些实现帮助,并将其用作参考。 但我有一些与此相关的问题: 服务器(或磁盘)上文件内容的实际上传或写入将由servlet完成。 这个servlet(比如MyFileUploadServlet)是否需要扩展HttpServlet?或 我可以使用RemoteServiceServlet或实现任何其他接口?如果是,我需要实现/覆盖哪种方法 在我的servlet中,完成所有操作后,我需要将响应返回给客户机。 我认为form.addSub
Ashish为了上传文件,我在过去扩展了HttpServlet。我和你一起用 我为基于表单的上传制作了一个通用小部件。这是为了适应不同文件类型(纯文本和Base64)的上传。如果您只需要上传纯文本文件,可以将以下两个类合并为一个类
public class UploadFile extends Composite {
@UiField FormPanel uploadForm;
@UiField FileUpload fileUpload;
@UiField Button uploadButton;
interface Binder extends UiBinder<Widget, UploadFile> {}
public UploadFile() {
initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
fileUpload.setName("fileUpload");
uploadForm.setEncoding(FormPanel.ENCODING_MULTIPART);
uploadForm.setMethod(FormPanel.METHOD_POST);
uploadForm.addSubmitHandler(new SubmitHandler() {
@Override
public void onSubmit(SubmitEvent event) {
if ("".equals(fileUpload.getFilename())) {
Window.alert("No file selected");
event.cancel();
}
}
});
uploadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
uploadForm.submit();
}
});
}
public HandlerRegistration addCompletedCallback(
final AsyncCallback<String> callback) {
return uploadForm.addSubmitCompleteHandler(new SubmitCompleteHandler() {
@Override
public void onSubmitComplete(SubmitCompleteEvent event) {
callback.onSuccess(event.getResults());
}
});
}
}
纯文本文件的servlet位于服务器端。它将上载文件的内容返回给客户端。确保在类路径的某个地方安装jar以便从Apache Commons上传文件
public class TextFileUploadServiceImpl extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (! ServletFileUpload.isMultipartContent(request)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Not a multipart request");
return;
}
ServletFileUpload upload = new ServletFileUpload(); // from Commons
try {
FileItemIterator iter = upload.getItemIterator(request);
if (iter.hasNext()) {
FileItemStream fileItem = iter.next();
// String name = fileItem.getFieldName(); // file name, if you need it
ServletOutputStream out = response.getOutputStream();
response.setBufferSize(32768);
int bufSize = response.getBufferSize();
byte[] buffer = new byte[bufSize];
InputStream in = fileItem.openStream();
BufferedInputStream bis = new BufferedInputStream(in, bufSize);
long length = 0;
int bytes;
while ((bytes = bis.read(buffer, 0, bufSize)) >= 0) {
out.write(buffer, 0, bytes);
length += bytes;
}
response.setContentType("text/html");
response.setContentLength(
(length > 0 && length <= Integer.MAX_VALUE) ? (int) length : 0);
bis.close();
in.close();
out.flush();
out.close();
}
} catch(Exception caught) {
throw new RuntimeException(caught);
}
}
}
公共类TextFileUploadServiceImpl扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void doPost(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
如果(!ServletFileUpload.isMultipartContent(请求)){
response.sendError(HttpServletResponse.SC\u错误\u请求,
“不是多部分请求”);
返回;
}
ServletFileUpload upload=新建ServletFileUpload();//来自Commons
试一试{
FileItemIterator iter=upload.getItemIterator(请求);
if(iter.hasNext()){
FileItemStream fileItem=iter.next();
//String name=fileItem.getFieldName();//文件名,如果需要
ServletOutputStream out=response.getOutputStream();
答复:setBufferSize(32768);
int bufSize=response.getBufferSize();
字节[]缓冲区=新字节[bufSize];
InputStream in=fileItem.openStream();
BufferedInputStream bis=新的BufferedInputStream(in,bufSize);
长长度=0;
整数字节;
而((字节=bis.read(buffer,0,bufSize))>=0){
out.write(缓冲区,0,字节);
长度+=字节;
}
response.setContentType(“text/html”);
response.setContentLength(
(长度>0&&L)
public class UploadFileAsText extends UploadFile {
public UploadFileAsText() {
uploadForm.setAction(GWT.getModuleBaseURL() + "textupload");
}
}
public class TextFileUploadServiceImpl extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (! ServletFileUpload.isMultipartContent(request)) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Not a multipart request");
return;
}
ServletFileUpload upload = new ServletFileUpload(); // from Commons
try {
FileItemIterator iter = upload.getItemIterator(request);
if (iter.hasNext()) {
FileItemStream fileItem = iter.next();
// String name = fileItem.getFieldName(); // file name, if you need it
ServletOutputStream out = response.getOutputStream();
response.setBufferSize(32768);
int bufSize = response.getBufferSize();
byte[] buffer = new byte[bufSize];
InputStream in = fileItem.openStream();
BufferedInputStream bis = new BufferedInputStream(in, bufSize);
long length = 0;
int bytes;
while ((bytes = bis.read(buffer, 0, bufSize)) >= 0) {
out.write(buffer, 0, bytes);
length += bytes;
}
response.setContentType("text/html");
response.setContentLength(
(length > 0 && length <= Integer.MAX_VALUE) ? (int) length : 0);
bis.close();
in.close();
out.flush();
out.close();
}
} catch(Exception caught) {
throw new RuntimeException(caught);
}
}
}