ok..
for all the people out there with this question open...
after 3 days of testing and pulling my hair the answer is that it is
possible to send the response size to the client, and it will work in
the simplest way,
just set the content-length header by using the method
setContentLength.

so why it didn't work for me all this time?
the answer is simple (and annoying), google will overwrite it and
instead will add the "Transfer-Encoding: chunked" header instead when
the file is bigger than
1MB!!!!!!!

i always tested it with a file which is around 5MB and that why it
didn't work.

for testing it, i used this code:

public class showBlob extends HttpServlet {
        private final BlobstoreService blobstoreService =
BlobstoreServiceFactory.getBlobstoreService();
        private final BlobInfoFactory blobInfoFactory = new
BlobInfoFactory(DatastoreServiceFactory.getDatastoreService());


        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse
response)
                        throws IOException {
                BlobKey blobKey = new BlobKey(request.getParameter("blob-key"));
                BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
                response.setContentLength(new 
Long(blobInfo.getSize()).intValue());
                response.setHeader("content-type", blobInfo.getContentType());
                response.setHeader("content-disposition", "attachment; 
filename=" +
                blobInfo.getFilename());
                blobstoreService.serve(blobKey, response);
        }
}

and i uploaded a ziped file in the following sizes:
200K - worked
500K - worked
800K - worked
950K - worked
1M - failed (probably the file is a bit bigger than 1MB...)

Hope this helped any one...
and thanks to Jaroslav for being so patient and helpful...

Oded.

On May 16, 8:33 pm, Guss <oded.mai...@gmail.com> wrote:
> are you using resp.setHeader or resp.setContentLength ?
>
> Thanks for all the help!!!
>
> On May 16, 12:48 am, Jaroslav Záruba <jaroslav.zar...@gmail.com>
> wrote:
>
>
>
>
>
> > Works for 
> > me:http://jzaruba-1.appspot.com/blob?key=AMIfv97ojheagz9LYcvrv86ROmXLdu4...
> > Are you sure you send actual number in your header?
>
> > On Sat, May 15, 2010 at 11:35 PM, Guss <oded.mai...@gmail.com> wrote:
> > > the code is working on the development environment, but not after i
> > > deploy it to gae
>
> > > On May 16, 12:17 am, Guss <oded.mai...@gmail.com> wrote:
> > > > hmmm
> > > > not working..
> > > > i don't know why..
>
> > > > i run this code:
> > > >         public void doGet(HttpServletRequest req, HttpServletResponse
> > > resp)
> > > >                         throws IOException {
>
> > > >                 BlobstoreService blobstoreService =
> > > > BlobstoreServiceFactory.getBlobstoreService();
>
> > > >                 Iterator<BlobInfo> iterator = new
> > > > BlobInfoFactory().queryBlobInfos();
>
> > > >                 while(iterator.hasNext()) {
> > > >                   BlobInfo b = iterator.next();
> > > >                   if (b.getFilename().equals("myfile.exe")) {
> > > >                           resp.setHeader("content-type",
> > > b.getContentType());
> > > >                           resp.setHeader("content-disposition",
> > > "attachment; filename=" +
> > > > b.getFilename());
> > > >                           resp.setHeader("content-length", new
> > > > Long(b.getSize()).toString());
> > > >                           resp.setContentLength(new
> > > Long(b.getSize()).intValue());
> > > >                           blobstoreService.serve(b.getBlobKey(),resp);
> > > >                   }
> > > >                 }
> > > >         }
>
> > > > and got this response header (using firebug)
> > > > HTTP/1.1 200 OK
> > > > Content-Type: application/x-msdownload
> > > > Content-Disposition: attachment; filename=myfile.exe
> > > > Date: Sat, 15 May 2010 21:14:16 GMT
> > > > Server: Google Frontend
> > > > Transfer-Encoding:chunked
>
> > > > On May 15, 10:49 pm, Jaroslav Záruba <jaroslav.zar...@gmail.com>
> > > > wrote:
>
> > > > > Weird... Maybe it is the non-capitals in the header name? I'm not sure
> > > > > whether it shouldn't be rather "Content-Length", instead of
> > > > > "content-length". Maybe you cold try
> > > > > response.setContentLength(size)
>
> > > > > this is exact copy'n'paste from my code:
> > > > > --
> > > > > BlobKey blobKey = new BlobKey(request.getParameter("key"));
>
> > > > > BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
> > > > > response.setContentLength(new Long(blobInfo.getSize()).intValue());
> > > > > response.setHeader("content-type", blobInfo.getContentType());
> > > > > response.setHeader("content-disposition", "attachment; filename=" +
> > > > > blobInfo.getFilename());
>
> > > > > blobstoreService.serve(blobKey, response);
> > > > > --
> > > > > ...both Firebug and Live HTTP headers show the header (with proper
> > > value)...
>
> > > > > hope it helps
>
> > > > > On Sat, May 15, 2010 at 9:00 PM, Guss <oded.mai...@gmail.com> wrote:
> > > > > > one more thing,
> > > > > > i used httpfox to check the response header, and "content-length"
> > > > > > header is not sent in the response..
>
> > > > > > On May 15, 8:28 pm, Jaroslav Záruba <jaroslav.zar...@gmail.com>
> > > wrote:
> > > > > > > Hi
>
> > > > > > > --
> > > > > > > BlobInfoFactory blobInfoFactory = new
> > > > > > > BlobInfoFactory(DatastoreServiceFactory.getDatastoreService());
> > > > > > > BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
> > > > > > > long blobSize = blobInfo.getSize();
> > > > > > > response.setHeader("content-length", new
> > > Long(blobSize).toString());
> > > > > > > --
>
> > > > > > > Is this what you mean?
>
> > > > > > > Regards
> > > > > > >   J. Záruba
>
> > > > > > > On Sat, May 15, 2010 at 6:38 PM, Guss <oded.mai...@gmail.com>
> > > wrote:
> > > > > > > > Hi,
> > > > > > > > I'm using java in GAE and i recently started using Blobstore to
> > > serve
> > > > > > > > my application download file, the only "issue" that i have is
> > > that
> > > > > > > > when it serves the file
> > > > > > > > the size is not sent to the browser so it can't estimate the 
> > > > > > > > time
> > > for
> > > > > > > > the download to complete...
>
> > > > > > > > here is the piece of code that i use to serve the file:
> > > > > > > >                BlobstoreService blobstoreService =
> > > > > > > > BlobstoreServiceFactory.getBlobstoreService();
>
> > > > > > > >                Iterator<BlobInfo> iterator = new
> > > > > > > > BlobInfoFactory().queryBlobInfos();
>
> > > > > > > >                while(iterator.hasNext()) {
> > > > > > > >                  BlobInfo b = iterator.next();
> > > > > > > >                  if (b.getFilename().equals('myfile.exe'))
>
> > >  blobstoreService.serve(b.getBlobKey(),resp);
> > > > > > > >                }
>
> > > > > > > > is there a way to also send the file size to the browser while
> > > serving
> > > > > > > > the file?
>
> > > > > > > > thanks,
> > > > > > > > Oded.
>
> > > > > > > > --
> > > > > > > > You received this message because you are subscribed to the
> > > Google
> > > > > > Groups
> > > > > > > > "Google App Engine" group.
> > > > > > > > To post to this group, send email to
> > > google-appengine@googlegroups.com
> > > > > > .
> > > > > > > > To unsubscribe from this group, send email to
> > > > > > > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > > > > > > >  e...@googlegroups.com><google-appengine%2Bunsubscrib
> > > e...@googlegroups.com><google-appengine%2Bunsubscrib
> > > > > > e...@googlegroups.com>
> > > > > > > > .
> > > > > > > > For more options, visit this group at
> > > > > > > >http://groups.google.com/group/google-appengine?hl=en.
>
> > > > > > > --
> > > > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > > "Google App Engine" group.
> > > > > > > To post to this group, send email to
> > > google-appeng...@googlegroups.com.
> > > > > > > To unsubscribe from this group, send email to
> > > > > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > > > > >  e...@googlegroups.com><google-appengine%2Bunsubscrib
> > > e...@googlegroups.com>
> > > > > > .
> > > > > > > For more options, visit this group athttp://
> > > > > > groups.google.com/group/google-appengine?hl=en.
>
> > > > > > --
> > > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > > "Google App Engine" group.
> > > > > > To post to this group, send email to
> > > google-appeng...@googlegroups.com.
> > > > > > To unsubscribe from this group, send email to
> > > > > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > > > > >  e...@googlegroups.com><google-appengine%2Bunsubscrib
> > > e...@googlegroups.com>
> > > > > > .
> > > > > > For more options, visit this group at
> > > > > >http://groups.google.com/group/google-appengine?hl=en.
>
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups "Google App Engine" group.
> > > > > To post to this group, send email to google-appengine@googlegroups.com
> > > .
> > > > > To unsubscribe from this group, send email to
> > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > >  e...@googlegroups.com>
> > > .
> > > > > For more options, visit this group athttp://
> > > groups.google.com/group/google-appengine?hl=en.
>
> > > > --
> > > > You received this message because you are subscribed to the Google 
> > > > Groups
> > > "Google App Engine" group.
> > > > To post to this group, send email to google-appeng...@googlegroups.com.
> > > > To unsubscribe from this group, send email to
> > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > >  e...@googlegroups.com>
> > > .
> > > > For more options, visit this group athttp://
> > > groups.google.com/group/google-appengine?hl=en.
>
> > > --
> > > You received this message because you are subscribed to the Google Groups
> > > "Google App Engine" group.
> > > To post to this group, send email to google-appeng...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > google-appengine+unsubscr...@googlegroups.com<google-appengine%2Bunsubscrib
> > >  e...@googlegroups.com>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/google-appengine?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Google App Engine" group.
> > To post to this group, send email to google-appeng...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > google-appengine+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/google-appengine?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine" group.
> To post to this group, send email to google-appeng...@googlegroups.com.
> To unsubscribe from this group, send email to 
> google-appengine+unsubscr...@googlegroups.com.
> For more options, visit this group 
> athttp://groups.google.com/group/google-appengine?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to