File Upload

276 views
Skip to first unread message

Joel Trunick

unread,
Oct 24, 2011, 11:32:59 AM10/24/11
to lib-gwt-file
How do I use the DropPanel to upload files? I'd like to be able to
drag/drop files and have them uploaded.

walid dahhane

unread,
Oct 24, 2011, 12:13:32 PM10/24/11
to lib-gw...@googlegroups.com

code GWT: 

@Override
            public void onDrop(final DropEvent event) {
                event.stopPropagation();
                event.preventDefault();

                final RequestBuilder rb = new
RequestBuilder(RequestBuilder.POST, "./servletUpload");

                final String
type=event.getDataTransfer().getFiles().getItem(0).getType();
                final String
name=event.getDataTransfer().getFiles().getItem(0).getName();

                final FileReader fileReader=new FileReader();
                LoadHandler handler=new LoadHandler() {

                    @Override
                    public void onLoad(LoadEvent evt) {

                        rb.setHeader("filename", name);
                        rb.setHeader("Content-Type", type
+";charset=ISO-8859-1");

                        try {

                            rb.sendRequest(fileReader.getResult(),
                                new RequestCallback() {

                                    @Override
                                    public void onError(Request arg0,
Throwable arg1) {
                                    }

                                    @Override
                                    public void
onResponseReceived(Request arg0,
                                            Response arg1) {
                                        rb.setHeader("Content-Type",
type+";charset=ISO-8859-1");

                                    } }
                            );
                        } catch (RequestException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                    }
                };;;

fileReader.readAsBinaryString(event.getDataTransfer().getFiles().getItem(0));

                fileReader.addLoadHandler(handler);

            }
        });


Code Java:

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

                File f = new File(request.getHeader("filename"));

                Base64InputStream decodingStream = new
Base64InputStream(request.getInputStream());

                Writer w = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream(f),Charset.forName("ISO-8859-1")));

                int c;
                while((c=decodingStream.read())!=-1){
                        w.write(c);
                }
                w.flush();
                w.close();
                decodingStream.close();

}

jgh...@gmail.com

unread,
Mar 11, 2013, 1:57:13 PM3/11/13
to lib-gw...@googlegroups.com
Using your code, I've only managed to save text files, I don't save other formats, for example pdf
Could save other formats?

Lukas Laag

unread,
Mar 12, 2013, 5:14:17 AM3/12/13
to lib-gw...@googlegroups.com
Yes, you can save other formats than text. It depends on the method
you invoke on FileReader: readAsText(), readAsArrayBuffer(),
readAsBinaryString. It also depends on which browser / platform you
are using. Support for the File API is not available everywhere. What
browser / os are you using ?

Lukas
> --
> You received this message because you are subscribed to the Google Groups
> "lib-gwt-file" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to lib-gwt-file...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

jgh...@gmail.com

unread,
Mar 12, 2013, 6:35:46 AM3/12/13
to lib-gw...@googlegroups.com
thanks for the reply

I am using mozilla Version 15.0.1 and Chromme 25.0.1364.152m
Only text files saved, the rest is created with the correct name and format but the wrong content
The code I am using is as follows:

@UiHandler("dropPanel")
public void onDrop(final DropEvent event) {
    event.stopPropagation();
    event.preventDefault();

    final RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "myURL");
    final String type = event.getDataTransfer().<DataTransferExt>cast().getFiles().getItem(0).getType();
    final String name = event.getDataTransfer().<DataTransferExt>cast().getFiles().getItem(0).getName();

    final FileReader fileReader = new FileReader();
    LoadHandler handler = new LoadHandler() {
        @Override
        public void onLoad(LoadEvent evt) {
            rb.setHeader("filename", name);
            rb.setHeader("Content-Type", type + ";charset=ISO-8859-1");
            try {
                rb.sendRequest(fileReader.getStringResult(), new RequestCallback() {
                    @Override
                    public void onError(Request arg0, Throwable arg1) {
                    }
                    @Override
                    public void onResponseReceived(Request arg0, Response arg1) {
                        rb.setHeader("Content-Type", type + ";charset=ISO-8859-1");
                        }
                    }
                );
            } catch (RequestException e1) {
                // TODO Auto-generated catch block
                 e1.printStackTrace();
            }
        }
    };
    fileReader.readAsBinaryString(event.getDataTransfer().<DataTransferExt>cast().getFiles().getItem(0));
    fileReader.addLoadHandler(handler);
}

And on the server:

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

    File f = new File("C:\\myUrlLocal", request.getHeader("filename"));
    Writer w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f)));

    int c;
    while ((c = request.getInputStream().read()) != -1) {
        w.write(c);
    }
    w.flush();
    w.close();
    request.getInputStream().close();
}


thank you very much

Lukas Laag

unread,
Mar 12, 2013, 8:13:02 AM3/12/13
to lib-gw...@googlegroups.com
Hi,
I do not think the problem is related to the file API. I think it is
related to the transfer part and the choice of encoding. I am not very
experienced in this area, but I think that if the file you are trying
to send is a binary file, you cannot send it as ISO-8859-1, which is a
text encoding for latin alphabets. You need to find a code sample
which uses RequestBuilder to upload binary files and see how they do
it.

Lukas
Reply all
Reply to author
Forward
0 new messages