在web2py中返回uploads目录的文件 - 字符串问题
我有用户通过一个假的目录结构上传文件,这个结构是用数据库来实现的。我在数据库中有父路径、文件名和文件(文件类型是“上传”)这些字段,这些都是我通过控制器设置的。我可以看到文件确实被正确地存储在上传目录中,所以这一部分是没问题的。为了参考,我是这样存储文件的:
db.allfiles.insert(filename=filename, \
parentpath=parentpath, \
file=db.allfiles.file.store(file.file,filename), \
datecreated=now,user=me)
我现在想设置一个下载文件的功能,这样用户就可以通过类似 app/controller/function/myfiles/image.jpg 的方式下载文件。我是用以下代码来找到文件的:
file=db((db.allfiles.parentpath==parentpath)&\
(db.allfiles.filename==filename)&\
(db.allfiles.user==me)).select()[0]
我尝试返回 file.file,但我得到的 jpg 文件其实是一些像这样的字符串:
allfiles.file.89fe64038f1de7be.6d6f6e6b65792d372e6a7067.jpg
这就是数据库中的文件名。我还尝试了这段代码:
os.path.join(request.folder,('uploads/'),'/'.join(file.file))
但我得到的是这个路径:
/home/charles/web2py/applications/chips/uploads/a/l/l/f/i/l/e/s/./f/i/l/e/./8/9/f/e/6/4/0/3/8/f/1/d/e/7/b/e/./6/d/6/f/6/e/6/b/6/5/7/9/2/d/3/7/2/e/6/a/7/0/6/7/./j/p/g
我觉得这可能是一种特殊的字符串,或者 file.file 可能并不完全是一个字符串。我能通过我的函数把文件返回给用户吗?
2 个回答
1
Python中的字符串是一种序列类型,所以它们是可以被逐个访问的。当你把一个字符串作为参数传给join方法时,它会一个一个地处理字符串里的每个字符。比如说:
>>> '/'.join('hello')
'h/e/l/l/o'
另外,注意os.path.join会自动用你操作系统合适的路径分隔符来分隔它的参数(也就是os.path.sep),所以你不需要手动插入斜杠。
4
你说得差不多了。试试这个:
os.path.join(request.folder,'uploads',file.file)