GLN
GLN

Reputation: 161

how to get file content from file using gwtupload

i am using GWTUpload to upload a file. i am getting the server info, file name, content type etc.. in onFinishHandler, but there's no option to get the file content from server to client.

Note : am trying to upload XML File and EXCEL File

i am using GWT 2.4, GXT 3.0.1, GWTUpload 0.6.6

here's the sample code

Client Code - OnFinishHandler

u.addOnFinishUploadHandler(new OnFinishUploaderHandler() {
            @Override
            public void onFinish(IUploader uploader) {
                if (uploader.getStatus() == Status.SUCCESS) {

                    System.err.println(uploader.getServerResponse());

                    UploadedInfo info = uploader.getServerInfo();
                    System.out.println("File name " + info.name);
                    System.out.println("File content-type " + info.ctype);
                    System.out.println("File size " + info.size);

                    System.out.println("Server message " + info.message);
                }
            }
        });

Servlet Code

public class GWTFileUploadServlet extends UploadAction {
    private static final long serialVersionUID = -6742854283091447922L;

    String fileContent;
    File uploadedFile;

    @Override
    public String executeAction(HttpServletRequest request,
            List<FileItem> sessionFiles) throws UploadActionException {
        String response = "";
        int cont = 0;
        for (FileItem item : sessionFiles) {
            if (false == item.isFormField()) {
                cont++;
                try {
                    File file = File.createTempFile("upload-", ".bin");
                    item.write(file);

                                        uploadedFile = file;
                    fileContent = item.getContentType();


                    response += "File saved as " + file.getAbsolutePath();

                } catch (Exception e) {
                    throw new UploadActionException(e.getMessage());
                }
            }
        }

        removeSessionFileItems(request);

        return response;
    }

    @Override
    public void getUploadedFile(HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        if (fileContent != null && !fileContent.isEmpty()) {
            response.setContentType(fileContent);
            FileInputStream is = new FileInputStream(uploadedFile);
            copyFromInputStreamToOutputStream(is, response.getOutputStream());
        } else {
            renderXmlResponse(request, response, XML_ERROR_ITEM_NOT_FOUND);
        }
    }

}

please help me....

Upvotes: 0

Views: 1555

Answers (2)

You can read the file you have created in the filesystem when you called item.write(...), but it is better if you get an InputStream from the FileItem you received and write its content anywhere. For instance if the content is a String you can use a StringWritter to get it:

      InputStream inputStream = item.getInputStream();

      StringWriter writer = new StringWriter();
      IOUtils.copy(inputStream, writer);
      String theContentString = writer.toString();

[EDITED]

To get the content of the file in client side, so you have to retrieve it from the server using any method:

  • As as a customized message in your gwtupload servlet if the content of the file is ascii: use return String of executeAction.

  • Do a RequestBuilder call to the servlet to get the file using the uploader url value.

  • Use any GWT ajax mechanism like RPC.

In modern browsers you can get the content of a file in client side without sending it to server side. Take a look to lib-gwt-file

Upvotes: 1

kedar
kedar

Reputation: 103

In your code You can just use

byte[] file ; file = item.get();

And You will get all the file content in an encoded format in the "file" variable .

Upvotes: 0

Related Questions