GWT - Fájl feltöltés

GWT - Fájl feltöltés
2014-03-11T10:14:49+01:00
2014-03-12T13:31:08+01:00
2022-11-30T17:30:39+01:00
vazul
Sziasztok!

Egy GWT -s kliensel szeretnék egy fájlt felölteni a szerverre.

A GWT -s kliensen létrehoztam egy FileUpload -ot, egy FormPanel -t és egy gombot aminek az onClick -jében indítanám el a feltöltést.

Majd ezek után csináltam egy servletet, ami fogadná a fájlt és létrehozná a szerveren.

De nem működik. Meghívódik a szervlet, de a while (iter.hasNext()) { -ciklusba már nem lép be.

Mi lehet a gubanc?

GWT:
fileUpload = new FileUpload();
form = new FormPanel();
form.setAction("http://localhost:8080/FileUpload/");
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
@Override
public void onSubmitComplete(SubmitCompleteEvent event) {
SC.say(event.getResults());
}
});

button6.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String filename = fileUpload.getFilename();
if (filename.length() == 0) {
SC.say("No File Specified!");
} else {
form.submit();
}
}
});

Servlet:
public class FileUpload extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=windows-1250";

public void init(ServletConfig config) throws ServletException {
super.init(config);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try{
// Parse the request
List items = upload.parseRequest(request);

// Process the uploaded items
Iterator iter = items.iterator();

while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//handling a normal form-field
if(item.isFormField()) {
System.out.println("Got a form field");
String name = item.getFieldName();
String value = item.getString();
System.out.print("Name:"+name+",Value:"+value);
} else {//handling file loads


System.out.println("Not form field");
String fieldName = item.getFieldName();
String fileName = item.getName();
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
System.out.print("Field Name:"+fieldName+",File Name:"+fileName);
System.out.print("Content Type:" + contentType +",Is In Memory:"+isInMemory+",Size:"+sizeInBytes);
byte[] data = item.get();
fileName = "c:\UPLOADS" + fileName;
System.out.print("File name:" +fileName);

FileOutputStream fileOutSt = new FileOutputStream(fileName);
fileOutSt.write(data);
fileOutSt.close();
System.out.print("File Uploaded Successfully!");
}
}
} catch(Exception e){
System.out.print("File Uploading Failed!" + e.getMessage());
}
}
}
Mutasd a teljes hozzászólást!
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); } } }


C:\upload könyvtárhoz van jogosultsága a servletnek? Nem tartom valószínűnek ha csak a servered konfig file-ban be nem állítottad (alternate doc root).
Mutasd a teljes hozzászólást!

  • Szia,
    Néhány kérdés, lehet segít:
    -web.xml be van állítva?
    -használd inkább azt, hogy:
    form.setAction(GWT.getModuleBaseURL() + "FileUpload/";
    így próbltad már?
    -átnézted ezt a doksit:
    GWT FileUpload Widget ?
    Mutasd a teljes hozzászólást!
  • Igen néztem ezt az oldalt. meg még rengeteget...

    A szervlet WEB.XML -jébe csak ennyit írtam:

    <?xml version = '1.0' encoding = 'windows-1250'?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>1.001</display-name>
    <description>A GWT -s kliens ennek a segítségével tölt fel fájlokat a WEBszerverre</description>
    <servlet>
    <servlet-name>FileUpload</servlet-name>
    <servlet-class>project1.FileUpload</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>FileUpload</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <session-config>
    <session-timeout>1800000</session-timeout>
    </session-config>
    <mime-mapping>
    <extension>html</extension>
    <mime-type>text/html</mime-type>
    </mime-mapping>
    <mime-mapping>
    <extension>txt</extension>
    <mime-type>text/plain</mime-type>
    </mime-mapping>


    </web-app>
    Mutasd a teljes hozzászólást!
  • Szerintem jónak tűnik a web.xml.
    A FileItemFactory biztos hogy kell a servleted első soraiban?
    L.
    Mutasd a teljes hozzászólást!
  • 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); } } }


    C:\upload könyvtárhoz van jogosultsága a servletnek? Nem tartom valószínűnek ha csak a servered konfig file-ban be nem állítottad (alternate doc root).
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd