using apache fileupload on GAE
Asked Answered
E

2

6

I use Apache Commons FileUpload in a java server-side app that has a html form with fields :

  1. A destination fied that will be filled with email address of the destination mailbox
  2. A message text with a message of the sender
  3. A < input type=file ... field for uploading a photo. I can receive uploaded file (as a stream) but how

This app I want to upload on GAE . I can receive uploaded file (as a stream , using org.apache.commons.fileupload.FileItemStream).

I want to receive too input textfields (i.e. 1) and 2)) - completed by the user of app)

I want to access these using org.apache.commons.fileupload.FileItem but I receive java.rmi.server.UID is a restricted class

Etz answered 21/4, 2011 at 10:17 Comment(2)
Writting file on GAE is not allowed.Kresic
@Kresic Who said anything about writing files?Steelworker
L
10

You should use the FileItemIterator of the Apache Commons FileUpload.

import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import java.io.InputStream;
..
public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    try {
      ServletFileUpload upload = new ServletFileUpload();
      res.setContentType("text/plain");

      FileItemIterator iterator = upload.getItemIterator(req);
      while (iterator.hasNext()) {
        FileItemStream item = iterator.next();
        String name = item.getFieldName();
        InputStream stream = item.openStream();

        if (item.isFormField()) {
          //regular form field
          resp.getWriter().println(("Form:" + name + " : " + Streams.asString(stream));
        } else {
          //fileform field 
          resp.getWriter().println(("File:" +name + " : " + item.getName());
        }

      }
    } catch (Exception ex) {
      throw new ServletException(ex);
    }
}
Lidialidice answered 21/4, 2011 at 12:40 Comment(1)
I was using a FileItemIterator... List<FileItem> fileItemsList = uploader.parseRequest(request); Iterator<FileItem> fileItemsIterator = fileItemsList.iterator(); ... but this was throwing a NullPointer at org.apache.commons.fileupload.disk.DiskFileSystem.getTempFil‌​e because there is no file system... So your code that uses FileItemStream instead works fine on GAE... Thanks lots for postingRateable
M
1

Take a look at this: Google App Engine and FileUpload

You can't write directly to the filesystem in GAE, but take a look at GAEVFS, which uses the datastore and memcache to emulate a filesystem.

Mascle answered 21/4, 2011 at 11:52 Comment(2)
I do not want to make use of persistence on Google cloud , I want to use Streaming futures from FileUpload. I have already sent pictures but having 1) and 2) hard-coded in the servlet . But I do not how to get these 2 field dynamically ie typed by user of app.Etz
Oops ment to comment on the answer aboveRateable

© 2022 - 2024 — McMap. All rights reserved.