Ich habe eine kleine Anwendung in GWT zum Hochladen und Herunterladen von Dateien nach dem Ausführen einiger Operationen und es funktioniert gut, aber das Laden von Dialogbild nie nach dem Herunterladen der Datei, bitte beraten.Formularaktion nicht nach dem Herunterladen der Datei mit Servlets in GWT?
Client-Seite Code
public class Firstmodule implements EntryPoint
{
public void onModuleLoad()
{
final PopupPanel popup = new PopupPanel(false, true); // Create a modal dialog box that will not auto-hide
final FileUpload fileUpload = new FileUpload();
final FormPanel form = new FormPanel();
VerticalPanel vPanel = new VerticalPanel();
Image img = new Image("download.png");
vPanel.add(img);
form.setMethod(FormPanel.METHOD_POST);
// The HTTP request is encoded in multipart format.
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setTitle("Family_Common_Fet");
form.setAction(GWT.getHostPageBaseURL() + "FileUploadGreeting");
form.setWidget(vPanel);
fileUpload.setName("uploader");
vPanel.add(fileUpload);
vPanel.setSpacing(20);
Label maxUpload = new Label();
maxUpload.setText("Text input file header: Datasheet, Vendor Code");
vPanel.add(maxUpload);
final Button submit = new Button("Upload and Run");
vPanel.add(submit);
submit.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event)
{
String filename = fileUpload.getFilename();
if(!filename.endsWith(".txt"))
{
System.out.println(filename);
Window.alert("only *.txt files accepted");
return;
}
else if(filename.length() == 0)
{
Window.alert("Please Select Text File");
return;
}
else
{
// loading dialog image
popup.add(new Image("loading_animation1.gif"));
popup.setGlassEnabled(true); // Enable the glass panel
popup.center(); // Center the popup and make it visible
submit.setEnabled(false);
submit.setFocus(true);
form.submit();
}
}
});
// Add an event handler to the form.
form.addSubmitHandler(new FormPanel.SubmitHandler() {
public void onSubmit(SubmitEvent event)
{
// This event is fired just before the form is submitted. We can take
// this opportunity to perform validation.
}
});
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event)
{
//trying to stop the loading dialodg
popup.setGlassEnabled(false);
submit.setEnabled(true);
form.reset();
}
});
DecoratorPanel decPanel = new DecoratorPanel();
decPanel.setWidget(form);
RootPanel.get("uploadContainer").add(decPanel);
}
Servlet-Code
public class UploadFileHandler extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("Inside doPost");
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload fileUpload = new ServletFileUpload(factory);
// sizeMax - The maximum allowed size, in bytes. The default value of -1 indicates, that there is no limit.
// 1048576 bytes = 1024 Kilobytes = 1 x 10 Megabyte
fileUpload.setSizeMax(10485760);
System.out.println(request.getRemoteAddr());
if(!ServletFileUpload.isMultipartContent(request))
{
try
{
throw new FileUploadException("error multipart request not found");
}catch(FileUploadException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
List<FileItem> items = fileUpload.parseRequest(request);
if(items == null)
{
response.getWriter().write("File not correctly uploaded");
return;
}
Iterator<FileItem> iter = items.iterator();
String absofilepath = null;
String fileName = null;
String filepath = "temp//fileOutput_" + System.currentTimeMillis() + ".txt";
while(iter.hasNext())
{
FileItem item = (FileItem) iter.next();
////////////////////////////////////////////////
// http://commons.apache.org/fileupload/using.html
////////////////////////////////////////////////
// if (item.isFormField()) {
fileName = item.getName();
System.out.println("fileName is : " + fileName);
String typeMime = item.getContentType();
System.out.println("typeMime is : " + typeMime);
int sizeInBytes = (int) item.getSize();
System.out.println("Size in bytes is : " + sizeInBytes);
// byte[] file = item.get();
absofilepath = getServletContext().getRealPath(filepath);
item.write(new File(absofilepath));
// }
}
String request_ip = getClientIpAddr(request);
System.out.println("Request IP:" + request_ip);
String tempoutFile = "output//" + fileName + System.currentTimeMillis() + ".txt";
String absooutFile = getServletContext().getRealPath(tempoutFile);
System.out.println("ouput file : " + absooutFile);
//************ some other operations in code*******///
}catch(Exception e){
e.printStackTrace();
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("an Error has occuredin Exporter.bat" + e);
out.flush();
out.close();
}
// ****************************Downlaod **********************************//
downloadFile(request, response, absooutFile);
/*when i sing hashed code below it's return error in console and didn't stop the loading dialog image */
// PrintWriter out = response.getWriter();
// response.setHeader("Content-Type", "text/html");
// out.println("Check output File");
// System.out.println("Upload Ok");
// out.flush();
// out.close();
}catch(SizeLimitExceededException e)
{
System.out.println("File size exceeds the limit : 10 MB!!");
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("Maximum file size should not exceed 10MB!!");
out.flush();
out.close();
}catch(Exception e)
{
e.printStackTrace();
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("an Error has occured");
out.flush();
out.close();
}
}
public static String getClientIpAddr(HttpServletRequest request)
{
String ip = request.getHeader("X-Forwarded-For");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("HTTP_CLIENT_IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
}
return ip;
}
private void downloadFile(HttpServletRequest req, HttpServletResponse resp, String filePath)
{
try
{
File f = new File(filePath);
int length = 0;
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType(filePath);
resp.setContentType((mimetype != null) ? mimetype : "application/octet-stream");
resp.setContentLength((int) f.length());
resp.setHeader("Content-Disposition", "attachment; filename=Fam_Com_Fet.txt");
DataInputStream in = new DataInputStream(new FileInputStream(f));
byte[] bbuf = new byte[in.available()];
while((in != null) && ((length = in.read(bbuf)) != -1))
{
op.write(bbuf, 0, length);
}
in.close();
op.flush();
op.close();
// f.delete();
}catch(IOException ioe)
{
ioe.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
Dank