Returning a zip file (downloaded by user)??
Hi, I have a zip file that I create on the fly which is to be returned to the user. The process goes like this: 1. User clicks on a link. 2. External method creates a zip file and puts it in a temp folder( file system folder not Zope temp) 3. External method (same one) returns the zip file as part of response as type application/x-zip The following is what I do in to get it done:(part 3 i.e.) zip_size = stat(zip_file_name).st_size zip_file = open(zip_file_name) zip_data = zip_file.read() zip_file.close() REQUEST.RESPONSE.setStatus('OK') REQUEST.RESPONSE.setHeader('Content-Type','application/x-zip') REQUEST.RESPONSE.setHeader('Content-Length',zip_size) REQUEST.RESPONSE.write(zip_data) but when I try it out the following happens: - the zip file is created - zip_data has the data (of course) - i am prompted to download something of type application/x-unknown-content - if i save the file it has zero length so what am I doing wrong or not doing here, that needs to be done to get this right?? TIA AM -- ================================================================== Aseem Mohanty Neurobehavioral Systems Inc, 828 San Pablo Ave, Albany, CA 94706 (R) 510 7696011 (M) 510 3014871 (O) 510 5279231 ================================================================== "I saw `cout' being shifted "Hello world" times to the left and stopped right there!!" -- Steve Gonedes ==================================================================
Hi Aseem, These headers are set by an app I worked on (although I didn't do the zipfile-download-thingy myself). Hope these work for you too... REQUEST.RESPONSE.setHeader('Content-Type', 'application/zip') REQUEST.RESPONSE.setHeader('Content-Length', file_size) REQUEST.RESPONSE.setHeader('Content-Disposition', 'inline; filename=%s' % the_name_of_the_file) Another difference: the download method in aformentioned app does not "REQUEST.RESPONSE.write(data)", but just "returns" the data, after setting the headers. regards, jw -- Jan-Wijbrand Kolman jw@infrae.com On Tuesday, July 30, 2002, at 10:01 , Aseem Mohanty wrote:
Hi, I have a zip file that I create on the fly which is to be returned to the user. The process goes like this:
1. User clicks on a link. 2. External method creates a zip file and puts it in a temp folder ( file system folder not Zope temp) 3. External method (same one) returns the zip file as part of response as type application/x-zip
The following is what I do in to get it done:(part 3 i.e.)
zip_size = stat(zip_file_name).st_size zip_file = open(zip_file_name) zip_data = zip_file.read() zip_file.close() REQUEST.RESPONSE.setStatus('OK') REQUEST.RESPONSE.setHeader('Content-Type','application/x-zip') REQUEST.RESPONSE.setHeader('Content-Length',zip_size) REQUEST.RESPONSE.write(zip_data)
but when I try it out the following happens: - the zip file is created - zip_data has the data (of course) - i am prompted to download something of type application/x-unknown-content - if i save the file it has zero length
so what am I doing wrong or not doing here, that needs to be done to get this right?? TIA AM
-- ================================================================== Aseem Mohanty Neurobehavioral Systems Inc, 828 San Pablo Ave, Albany, CA 94706 (R) 510 7696011 (M) 510 3014871 (O) 510 5279231 ==================================================================
"I saw `cout' being shifted "Hello world" times to the left and stopped right there!!" -- Steve Gonedes ================================================================ ==
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
On Tue, Jul 30, 2002 at 01:01:03AM -0700, Aseem Mohanty wrote:
Hi, I have a zip file that I create on the fly which is to be returned to the user. The process goes like this:
1. User clicks on a link. 2. External method creates a zip file and puts it in a temp folder( file system folder not Zope temp) 3. External method (same one) returns the zip file as part of response as type application/x-zip
The following is what I do in to get it done:(part 3 i.e.)
zip_size = stat(zip_file_name).st_size zip_file = open(zip_file_name) zip_data = zip_file.read() zip_file.close()
REQUEST.RESPONSE.setStatus('OK') REQUEST.RESPONSE.setHeader('Content-Type','application/x-zip') REQUEST.RESPONSE.setHeader('Content-Length',zip_size) REQUEST.RESPONSE.write(zip_data)
but when I try it out the following happens: - the zip file is created - zip_data has the data (of course) - i am prompted to download something of type application/x-unknown-content - if i save the file it has zero length
so what am I doing wrong or not doing here, that needs to be done to get this right?? TIA AM
--
I am doing something similar to this except I am setting up my zip file in an External Method, and then returning the read in zip file to a python script which looks something like this: data = context.externalMethodReturningZipFile() RESPONSE.setHeader('Content-Type', 'application/download') RESPONSE.setHeader('Content-Length', len(data)) RESPONSE.setHeader('Content-Disposition','attachment;filename=SomeFile.zip') return data HTH, Chris
================================================================== Aseem Mohanty Neurobehavioral Systems Inc, 828 San Pablo Ave, Albany, CA 94706 (R) 510 7696011 (M) 510 3014871 (O) 510 5279231 ================================================================== "I saw `cout' being shifted "Hello world" times to the left and stopped right there!!" -- Steve Gonedes ==================================================================
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
-- Chris Meyers Huttleston Data Design 7941 Tree Lane Suite 200 Madison WI 53717
Hi, I was sort of working on the same problem and thought it might be interesting for the list to see my solution, based on this thread: def zipFile( self, RESPONSE, anId='', fileList=None ): """Returns the contents of the current directory as a zip file""" if anId=='': anId='download' sfile=StringIO() zip=ZipFile(sfile,mode='w', compression=ZIP_DEFLATED) for f in fileList: fd = open(f, 'rb') data = fd.read() fd.close() path=f[len(self.basepath):] zi=ZipInfo(path) zi.compress_type=ZIP_DEFLATED zip.writestr( zi, data) zip.close() data=sfile.getvalue() RESPONSE.setHeader('Content-Type', 'application/download') RESPONSE.setHeader('Content-Length', len(data)) RESPONSE.setHeader('Content-Disposition','attachment;filename=%s.zip' % anId) return data You put this method in your product, in this case LocalFS (or rewrite it to be an external method). Pass it a RESPONSE object, anID and a list of files on your disk (full paths) and it will return a zip file to be downloaded by the user, including the relative path (self.basepath is used for this, if you don't have it, delete that line) Douwe
-----Original Message----- From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of Chris Meyers Sent: Tuesday, July 30, 2002 10:44 PM To: Aseem Mohanty; zope@zope.org Subject: Re: [Zope] Returning a zip file (downloaded by user)??
On Tue, Jul 30, 2002 at 01:01:03AM -0700, Aseem Mohanty wrote:
Hi, I have a zip file that I create on the fly which is to be returned to the user. The process goes like this:
1. User clicks on a link. 2. External method creates a zip file and puts it in a temp folder( file system folder not Zope temp) 3. External method (same one) returns the zip file as part of response as type application/x-zip
The following is what I do in to get it done:(part 3 i.e.)
zip_size = stat(zip_file_name).st_size zip_file = open(zip_file_name) zip_data = zip_file.read() zip_file.close()
REQUEST.RESPONSE.setStatus('OK') REQUEST.RESPONSE.setHeader('Content-Type','application/x-zip') REQUEST.RESPONSE.setHeader('Content-Length',zip_size) REQUEST.RESPONSE.write(zip_data)
but when I try it out the following happens: - the zip file is created - zip_data has the data (of course) - i am prompted to download something of type application/x-unknown-content - if i save the file it has zero length
so what am I doing wrong or not doing here, that needs to be done to get this right?? TIA AM
--
I am doing something similar to this except I am setting up my zip file in an External Method, and then returning the read in zip file to a python script which looks something like this:
data = context.externalMethodReturningZipFile() RESPONSE.setHeader('Content-Type', 'application/download') RESPONSE.setHeader('Content-Length', len(data)) RESPONSE.setHeader('Content-Disposition','attachment;filename=Some File.zip')
return data
HTH, Chris
================================================================== Aseem Mohanty Neurobehavioral Systems Inc, 828 San Pablo Ave, Albany, CA 94706 (R) 510 7696011 (M) 510 3014871 (O) 510 5279231
============================================================ ======
"I saw `cout' being shifted "Hello world" times to the left and stopped right there!!" -- Steve Gonedes ==================================================================
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
-- Chris Meyers Huttleston Data Design 7941 Tree Lane Suite 200 Madison WI 53717
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (4)
-
Aseem Mohanty -
Chris Meyers -
douwe@oberon.nl -
Jan-Wijbrand Kolman