|
Ciao a tutti.
Dunque ho un prodotto sviluppato con dexterity. All'interno di una view ho inserito un metodo che viene chiamato dalla submit di un form e dovrebbe restituire un file zip. Il file in questione non e' un oggetto plone, ma viene creato dinamicamente su filesystem a seconda dei dati inseriti nel form. Quindi per far restituire il file, ho fatto cosi': ******************************************************************** iterator = filestream_iterator(zfname, 'rb') stat = os.stat(zfname) RESPONSE=self.request.response RESPONSE.setHeader('Content-Disposition', 'attachment; filename="%s"' % zfname.replace("/tmp/","")) RESPONSE.setHeader('Content-Type', "application/zip") RESPONSE.setHeader('Content-Length', stat.st_size) return iterator ******************************************************************** Ora, in questo modo mi fa scaricare un file zip con il nome corretto ma che in realta' non e' altro che l'html della view. Se invece dell'iterator leggo tutto il file (e' un approccio da evitare, ma per provare ...) restituisce il file zip corretto, ma sempre mischiato con l'html della vista. Qualcuno ha idea di quale possa essere il problema? La mia conf: Plone 4.0.5 Zope 2.12.17 Python 2.6.6 -- | Francesco Benincasa | http://www.linkedin.com/in/fbenincasa **** If one cannot enjoy reading a book over and over again, there is no use in reading it at all. -- Oscar Wilde _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
Ciao,
On 03/14/2012 04:07 PM, ciccio2000 wrote: > Ciao a tutti. > > Dunque ho un prodotto sviluppato con dexterity. > All'interno di una view ho inserito un metodo che viene chiamato dalla submit > di un form e dovrebbe restituire un file zip. > > Il file in questione non e' un oggetto plone, ma viene creato dinamicamente > su filesystem a seconda dei dati inseriti nel form. > > Quindi per far restituire il file, ho fatto cosi': > > ******************************************************************** > iterator = filestream_iterator(zfname, 'rb') > stat = os.stat(zfname) > > RESPONSE=self.request.response > RESPONSE.setHeader('Content-Disposition', 'attachment; filename="%s"' % zfname.replace("/tmp/","")) > RESPONSE.setHeader('Content-Type', "application/zip") > RESPONSE.setHeader('Content-Length', stat.st_size) > > return iterator > ******************************************************************** > > Ora, in questo modo mi fa scaricare un file zip con il nome corretto ma che in > realta' non e' altro che l'html della view. > > Se invece dell'iterator leggo tutto il file (e' un approccio da evitare, ma > per provare ...) restituisce il file zip corretto, ma sempre mischiato con > l'html della vista. > > Qualcuno ha idea di quale possa essere il problema? > > La mia conf: > Plone 4.0.5 > Zope 2.12.17 > Python 2.6.6 come restituisci il contenuto del file? Quel "return iterator" dove sta? Se restituisci il contenuto del file nel __call__ della view ti deve per forza mostrare il contenuto del file. Tipo: def __call__(self): return self.get_file_content() _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
* giovedì 15 marzo 2012, alle 13:07, Simone Orsi scrive:
> Ciao, [...] > come restituisci il contenuto del file? Quel "return iterator" dove sta? > > Se restituisci il contenuto del file nel __call__ della view ti deve > per forza mostrare il contenuto del file. > > Tipo: > > def __call__(self): > return self.get_file_content() E' in un metodo della view: class View(grok.View): grok.context(IMapViewer) grok.require('zope2.View') ... def downloadData(self): ... zfname = "/tmp/%s-%s-%s.zip" % (st, et, model) ... iterator = filestream_iterator(zfname, 'rb') RESPONSE.setHeader... return iterator come ho detto il file non e' un oggetto plone, ma viene generato su file system dinamicamente a seconda di come viene riempito un form (che si trova nella view). ciao e grazie. -- | Francesco Benincasa | http://www.linkedin.com/in/fbenincasa **** Soap and education are not as sudden as a massacre, but they are more deadly in the long run. -- Mark Twain _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
On 03/15/2012 02:35 PM, ciccio2000 wrote:
> * giovedì 15 marzo 2012, alle 13:07, Simone Orsi scrive: >> Ciao, > [...] >> come restituisci il contenuto del file? Quel "return iterator" dove sta? >> >> Se restituisci il contenuto del file nel __call__ della view ti deve >> per forza mostrare il contenuto del file. >> >> Tipo: >> >> def __call__(self): >> return self.get_file_content() > > E' in un metodo della view: > > class View(grok.View): > grok.context(IMapViewer) > grok.require('zope2.View') > > ... > > def downloadData(self): > ... > zfname = "/tmp/%s-%s-%s.zip" % (st, et, model) > ... > iterator = filestream_iterator(zfname, 'rb') > RESPONSE.setHeader... > return iterator > > > come ho detto il file non e' un oggetto plone, > ma viene generato su file system dinamicamente > a seconda di come viene riempito un form > (che si trova nella view). > > ciao e grazie. Non so come vuoi che funzioni il tutto ma una possibile soluzione e' quella che ti ho detto prima, farlo ritornare al __call__. Magari puoi mettere un pulsante di submit per il download che richiami la stessa vista e nel __call__ fai qualcosa del genere: def __call__(self): if self.request.get('download'): return self.downloadData() return super(self.__class__,self).__call__() _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
salve a tutti
ho lo stesso problema ( il dowload del file mi presenta il file della pagina del form) solo che invece di una browser view ho un form creato con z3c.form. e quindi la action del form e' gestita dal @button.buttonAndHandler qualsiasi cosa metta come return mi restituisce il codice html della vista. l'oggetto da far salvare e' un file che ho precedentemente salvato in un tempfile.TemporaryFile. come faccio a restituirlo come file da scaricare? buon lavoro Gianni 2012/3/15 Simone Orsi <[hidden email]>
_______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
Non dovrebbe essere solo una questione di mime type?
Vito
Il giorno 07 settembre 2012 10:30, Gianni Cozzolongo <[hidden email]> ha scritto: salve a tutti Vito Falco
Webdeveloper & designer freelance, Plone enthusiast Bari, IT tel +393346330137 | skype vito80ba | twitter vito80ba _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
andando avanti col debug trovo che arrivando alla esecuzione del return vero e proprio del form
.buildout/eggs/z3c.form-2.4.3-py2.6.egg/z3c/form/action.py(104)execute() il tipo di oggetto del result e' di tipo file e dovrebbe contenere il file corretto, ad un certo punto pero' .buildout/eggs/Zope2-2.13.8-py2.6.egg/ZPublisher/Publish.py(129)publish() -> response.setBody(result) il result e' diventato il render del fom ... cosa non ho capito e dove sbaglio? Gianni 2012/9/7 Vito Falco <[hidden email]> Non dovrebbe essere solo una questione di mime type? _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
ciao,
puo' essere che tu abbia settato il body del response con il descrittore del file non ancora resettato. Ti consiglio di fare qualcosa del tipo: filetemporaneo.seek(0) self.request.response.setBody(filetemporaneo.read()) return self.request.response.outputBody() prova un po' e facci sapere. ;) alessandro Il giorno 07 settembre 2012 11:35, Gianni Cozzolongo <[hidden email]> ha scritto: andando avanti col debug trovo che arrivando alla esecuzione del return vero e proprio del form -- bye SauZheR ************************************ l'iterazione è umana... la ricorsione, Divina! ************************************ reply to: sauzher AT gmail DOT com _______________________________________________ Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
|
ora funziona perfettamente.
grazie per le indicazioni. a presto gianni On 9/12/12, SauZheR <[hidden email]> wrote: > ciao, > puo' essere che tu abbia settato il body del response con il descrittore > del file non ancora resettato. > > Ti consiglio di fare qualcosa del tipo: > > filetemporaneo.seek(0) > self.request.response.setBody(filetemporaneo.read()) > > return self.request.response.outputBody() > > > prova un po' e facci sapere. > > > ;) > alessandro > > > Il giorno 07 settembre 2012 11:35, Gianni Cozzolongo > <[hidden email]>ha scritto: > >> andando avanti col debug trovo che arrivando alla esecuzione del return >> vero e proprio del form >> .buildout/eggs/z3c.form-2.4.3-py2.6.egg/z3c/form/action.py(104)execute() >> >> il tipo di oggetto del result e' di tipo file e dovrebbe contenere il >> file >> corretto, >> >> >> ad un certo punto pero' >> .buildout/eggs/Zope2-2.13.8-py2.6.egg/ZPublisher/Publish.py(129)publish() >> -> response.setBody(result) >> >> il result e' diventato il render del fom ... >> cosa non ho capito e dove sbaglio? >> >> Gianni >> >> >> >> >> 2012/9/7 Vito Falco <[hidden email]> >> >>> Non dovrebbe essere solo una questione di mime type? >>> http://kb.iu.edu/data/agtj.html >>> >>> Vito >>> >>> Il giorno 07 settembre 2012 10:30, Gianni Cozzolongo >>> <[hidden email] >>> > ha scritto: >>> >>> salve a tutti >>>> >>>> ho lo stesso problema ( il dowload del file mi presenta il file della >>>> pagina del form) >>>> solo che invece di una browser view ho un form creato con z3c.form. >>>> >>>> e quindi la action del form e' gestita dal @button.buttonAndHandler >>>> >>>> qualsiasi cosa metta come return mi restituisce il codice html della >>>> vista. >>>> >>>> l'oggetto da far salvare e' un file che ho precedentemente salvato in >>>> un >>>> tempfile.TemporaryFile. >>>> >>>> come faccio a restituirlo come file da scaricare? >>>> >>>> buon lavoro >>>> Gianni >>>> >>>> >>>> >>>> 2012/3/15 Simone Orsi <[hidden email]> >>>> >>>>> On 03/15/2012 02:35 PM, ciccio2000 wrote: >>>>> >>>>>> * giovedì 15 marzo 2012, alle 13:07, Simone Orsi scrive: >>>>>> >>>>>>> Ciao, >>>>>>> >>>>>> [...] >>>>>> >>>>>>> come restituisci il contenuto del file? Quel "return iterator" dove >>>>>>> sta? >>>>>>> >>>>>>> Se restituisci il contenuto del file nel __call__ della view ti deve >>>>>>> per forza mostrare il contenuto del file. >>>>>>> >>>>>>> Tipo: >>>>>>> >>>>>>> def __call__(self): >>>>>>> return self.get_file_content() >>>>>>> >>>>>> >>>>>> E' in un metodo della view: >>>>>> >>>>>> class View(grok.View): >>>>>> grok.context(IMapViewer) >>>>>> grok.require('zope2.View') >>>>>> >>>>>> ... >>>>>> >>>>>> def downloadData(self): >>>>>> ... >>>>>> zfname = "/tmp/%s-%s-%s.zip" % (st, et, model) >>>>>> ... >>>>>> iterator = filestream_iterator(zfname, 'rb') >>>>>> RESPONSE.setHeader... >>>>>> return iterator >>>>>> >>>>>> >>>>>> come ho detto il file non e' un oggetto plone, >>>>>> ma viene generato su file system dinamicamente >>>>>> a seconda di come viene riempito un form >>>>>> (che si trova nella view). >>>>>> >>>>>> ciao e grazie. >>>>>> >>>>> non importa da dove arriva il contenuto, importa come lo restituisci >>>>> ;) >>>>> >>>>> Non so come vuoi che funzioni il tutto ma una possibile soluzione e' >>>>> quella che ti ho detto prima, farlo ritornare al __call__. >>>>> >>>>> Magari puoi mettere un pulsante di submit per il download che richiami >>>>> la stessa vista e nel __call__ fai qualcosa del genere: >>>>> >>>>> def __call__(self): >>>>> if self.request.get('download'): >>>>> return self.downloadData() >>>>> return super(self.__class__,self).__**call__() >>>>> >>>>> ______________________________**_________________ >>>>> Plone-IT mailing list >>>>> [hidden email] >>>>> https://lists.plone.org/**mailman/listinfo/plone-plone-**it<https://lists.plone.org/mailman/listinfo/plone-plone-it> >>>>> http://plone-regional-forums.**221720.n2.nabble.com/Plone-** >>>>> Italy-f221721.html<http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html> >>>>> >>>> >>>> >>>> _______________________________________________ >>>> Plone-IT mailing list >>>> [hidden email] >>>> https://lists.plone.org/mailman/listinfo/plone-plone-it >>>> >>>> http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html >>>> >>> >>> >>> >>> -- >>> *Vito Falco* >>> Webdeveloper & designer freelance, Plone enthusiast >>> Bari, IT >>> tel +393346330137 | skype vito80ba | twitter vito80ba >>> Blog http://appuntiplone.wordpress.com >>> >>> >>> _______________________________________________ >>> Plone-IT mailing list >>> [hidden email] >>> https://lists.plone.org/mailman/listinfo/plone-plone-it >>> http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html >>> >> >> >> _______________________________________________ >> Plone-IT mailing list >> [hidden email] >> https://lists.plone.org/mailman/listinfo/plone-plone-it >> http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html >> > > > > -- > bye > SauZheR > ************************************ > l'iterazione è umana... > la ricorsione, Divina! > ************************************ > reply to: sauzher AT gmail DOT com > Plone-IT mailing list [hidden email] https://lists.plone.org/mailman/listinfo/plone-plone-it http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html |
| Powered by Nabble | Edit this page |
