sql – 使用原始文件名上传web2py
|
我想用SQL.factory()上传文件
form = SQLFORM.factory(
Field('file_name',requires=IS_NOT_EMPTY()),Field('file','upload',uploadfolder=upload_folder))
if form.accepts(request.vars,session): #.process().accepted:
response.flash = u'File uploaded'
session.your_name = form.vars.file_name
session.filename = request.vars.file
elif form.errors:
response.flash = 'form has errors'
return dict(form=form)
我想session.filename = request.vars.file是你设置文件名的地方.为什么我得到自动生成的文件名no_data.smth.23u8o8274823zu4i2.smth 谢谢 解决方法首先,request.vars.file是一个Python cgi.FieldStorage对象,因此session.filename = request.vars.file会导致错误. request.vars.file.file是实际的文件对象,request.vars.file.filename是上载文件的原始名称.通过上载字段上载文件时,web2py会自动生成“table_name.field_name.random_id.b16encoded_original_filename.extension”形式的新名称.这样做是为了防止目录遍历攻击并启用下载机制(需要知道表和字段名称).对于SQLFORM.factory,没有数据库表名,因此默认为表名为“no_table”. 您显示的代码实际上不应生成像’no_data.smth.23u8o8274823zu4i2.smth’这样的文件名.该文件名意味着您已明确告知SQLFORM.factory使用表名’no_data'(通过其table_name参数)并且上传字段名称为’smth’. (上面的代码会生成一个以’no_table.file’开头的文件名.) 注意,web2py会自动获取上传文件的原始名称,并将其编码(使用b16encode)到新文件名中(然后在使用内置下载机制时解码原始文件名).原始文件名也可在form.vars.file.filename中使用.因此,您根本不需要用户输入文件名.但是,如果要使用户能够输入可能与实际文件名不同的文件名,然后使用用户输入的文件名,则可以在创建表单之前添加以下内容: if 'file' in request.vars and request.vars.file_name:
request.vars.file.filename = request.vars.file_name
这将重新将上载文件的文件名分配给用户输入的值,然后web2py将用户输入的文件名编码为新文件名.但请注意,web2py依赖于文件扩展名来在下载时适当地设置HTTP标头,因此您可能需要添加一些逻辑以获取原始文件扩展名,以防用户输入错误. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql-server-2008 – 查询在SSRS 2008或BIDS 2008中不起作用
- sql-server – 计划使用PostgreSQL与ASP.NET:坏主意?
- 数据库设计技巧奉送了
- sql-server-ce-toolbox – 我可以在SQL Server Compact 4中
- 无法在com+ 目录中安装和配置程序集 错误:-2146233087的解
- SQL Server 数据库中索引原理分析说明
- sql – 使用循环Oracle遍历每个ID的完整路径
- SQL Server 获取当前日期的最大时间值
- sql – 如何使用Django Queryset在列中找到top-X最高值而不
- sql – 获取最后一个插入ID的标准方法是什么?
