Hi,
Here is the code that I am using
upload.html
<html>
<body>
<form enctype="multipart/form-data" method="POST" action="/fs/upload" >
<input type="file" name="uploadtest">
<input type="submit" value="upload">
</form>
</body>
</html>
Servlet code:
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
System.out.println("Form field " + name + " with value "
+ Streams.asString(stream) + " detected.");
} else {
System.out.println("File field " + name + " with file name "
+ item.getName() + " detected.");
// Process the input stream
}
}
When I am debugging the code using eclipse iter.hasNext() returns false.
Does anyone know the reason for this ?
--
Abhinav
-_[No constructors were harmed in the writing of this post. Any resemblance
to objects living or dead is purely coincidental]_-
On Tue, Oct 20, 2009 at 8:53 PM, Alexander Arendar <
[email protected]> wrote:
> Hi,
>
> it seems ok.
> I use the same way ApacheIO just I have regular UI form. But it's no matter
> if you fire POST http request from the HTML form or if that is done
> programatically.
> Just test and make sure it works.
>
> Sincerely,
> Alex
>
>
> On Tue, Oct 20, 2009 at 6:17 PM, Houston startup coder <
> [email protected]> wrote:
>
>>
>> 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
-~----------~----~----~----~------~----~------~--~---