never hardcode a path:

import os

return
response.stream(os.path.join(request.application,'uploads',rows[0].filedata),'rb'))

response stream makes sure that RANGE request are also supported.

On Apr 16, 12:57 pm, Dragonfyre13 <dragonfyr...@gmail.com> wrote:
> updated that one line to this, but it's not any better, just slightly
> more portable. Any insights?
>
> return open("./applications/" + request.application + "/uploads/" +
> rows[0].filedata).read()
>
> On Apr 16, 12:49 pm, Dragonfyre13 <dragonfyr...@gmail.com> wrote:
>
> > I want to be able to stream a file that's uploaded via an upload
> > field. So far, I haven't really found a way to do this, beyond
> > grabbing the file name out of filedata, and then sticking static
> > directory path on the front, which is both kludgy, and I have to think
> > the wrong way of going about it. Here's what I've got:
>
> > def play():
> >     response.headers["Content-Type"] = "audio/x-vox"
> >     response.headers["Content-Disposition"] = "attachment; filename="
> > + request.args[0] + '.vox'
> >     rows = db(db.audio_files.playname ==
> > request.args[0]).select(db.audio_files.ALL)
> >     if len(rows):
> >         return open("/opt/web2py/applications/myapp/uploads/" +
> > rows[0].filedata).read()
> >     else:
> >         raise ValueError, "Passed incorrect playname: " +
> > str(request.args[0])
>
> > Essentially, I have another controller uploading to the DB under
> > audio_files, and sticking a "playname" in the database as a reference
> > to that file. I can then pass the "playfile" name into this function
> > in order to get it to return the data out of that file handed back.
>
> > Here's the problem. Right now, I've got the directory path prepended
> > statically. That's bad in a big way. Second, there's no sanitation,
> > and minimal error handling. That will be cleaned up once I get it
> > working with an actual solution, rather than this hackish thing.
>
> > Basically, I expect that there's something other than
> > response.download that will give me the actual data for a file. I
> > tried response.download, but it doesn't let me set the content-type,
> > or content-disposition (that's all set by it, overriding my header
> > info). There has to be something that says "take the data from this
> > database entry, as a file object", I'm just looking for what that is.
>
> > I then want to be able to store back into it, but that's another point
> > not covered above, and I would assume I can just overwrite the old
> > file data, or just update the field in the DB. Perhaps if someone is
> > tackling the previous question, they can give this one a go too?
>
> > --
> > Subscription settings:http://groups.google.com/group/web2py/subscribe?hl=en

Reply via email to