I haven't actually tested this code yet since I got sidetracked with
some other stuff.  But I basically worked off of the example farther
down this page:

http://code.google.com/appengine/kb/java.html

Then I just modified it to save the file data as an attribute to an
object I want to persist to the datastore.  So does anyone know if
this is what I should be doing to have a desktop app upload files in
the background to Google App Engine?  Should they be going through a
servlet if it's not an actual human user filling out a file upload
form on a webpage?

Here's my code:



import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.io.IOException;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.datastore.Blob;
import com.ideate.PMF;

public class FileUploader extends HttpServlet {
  private static final Logger log =
      Logger.getLogger(FileUploader.class.getName());

  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();
        InputStream stream = item.openStream();

        if (item.isFormField()) {
          log.warning("Got a form field: " + item.getFieldName());
        } else {
          log.warning("Got an uploaded file: " + item.getFieldName() +
                      ", name = " + item.getName());

          // You now have the filename (item.getName() and the
          // contents (which you can read from stream).  Here we just
          // print them back out to the servlet output stream, but you
          // will probably want to do something more interesting (for
          // example, wrap them in a Blob and commit them to the
          // datastore).

          Blob uploadedImage = new Blob(IOUtils.toByteArray(stream));

          Photo photo = new Photo();
          photo.setName(item.getName());
          photo.setImageData(uploadedImage);

          PersistenceManager pm = PMF.get().getPersistenceManager();
          try {
                  pm.makePersistent(photo);
          } finally {
              pm.close();
          }

          /*
          int len;
          byte[] buffer = new byte[8192];
          while ((len = stream.read(buffer, 0, buffer.length)) != -1)
{
            res.getOutputStream().write(buffer, 0, len);
          }
          */
        }
      }
    } catch (Exception ex) {
      throw new ServletException(ex);
    }
  }
}


THE END

Thanks for any help...





On Oct 19, 12:18 pm, Abhinav Lele <[email protected]> wrote:
> Could you share your code for the servlet that handles file uploads. I have
> been not able to get that working. Thanks in advance
> --
> Abhinav
>
> -_[No constructors were harmed in the writing of this post. Any resemblance
> to objects living or dead is purely coincidental]_-
>
> On Mon, Oct 19, 2009 at 7:40 AM, Houston startup coder <
>
>
>
> [email protected]> wrote:
>
> > I need to upload images, sound files and text documents from a mostly
> > standalone client PC application to a GAE app. I'm following the file
> > upload example in the Google App Engine for Java documentation and
> > using the Apache Commons ServletFileUpload to stream in the data and
> > then save it with the PersistenceManager.
>
> > Uploading through a servlet seems just fine, but I took a step back to
> > wonder whether a servlet was the best way to upload these files to GAE
> > since this isn't a human choosing files on a webpage but rather some
> > software programatically sending the files up to the server.  Is a
> > servlet my best choice in this case?
>
> > Thanks...
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to