首页 > 编程知识 正文

pubmedapi密钥是什么,Thermoflask

时间:2023-05-06 01:04:20 阅读:108831 作者:3088

flask(werkzeug.util )的secure_filename的中文上传问题今天使用werkzeug.util中的secure_filename时,会出现中文名字上传问题

代码结构是

-template

-upload.html -简单的上传表单html

-upload -上传文件保存在此文件夹中

-XX.XX -这里是上传文件的地方

-root.py -处理文件

upload.html很简单。 这是html5的上传文件表单。 其中name是文件名称

! doctypehtmlhtmllang=' en ' headmetacharset=' utf-8 ' title title/title/headbodyformaction=' ' method=' post ' ench form-data ' input type=' filename ' input type=' submit ' voubmit

root.py

--- coding : utf-8-- fromwerkzeug.utilsimportsecure _ filenamefromflaskimportflask,request, render _ templaask redirectfromosimportpathapp=flask (_ name _ _ ) (app.route ),methods=['GET ',' post ' ] () fromunicodedataimportnormalizef.save (path.join ) path.abspath (path.dirname ) _ _ file _ (' uploads ' ) ) ' strict ' ).decode(utf-8 ) ) ) return redirect (URL _ for ) upload ) ) returnrender_template ) upload.hoad

普通的中文名字消失了

在那里处理后就正常了

处理方法如下

root.py的

f.save(upload_path )/'secure_filename ) normalize )、f.filename ).encode )、' ascii '、' ignore ' ) )。

f.save(upload_path )/'secure_filename ) normalize )、f.filename ).encode )、' utf-8 '、' ignore '

打开util.py

第三十行

_ filename _ ascii _ strip _ re=re.com pile (r ' [ ^ a-za-z0-9 _.- ] )后接一行

_ filename _ gbk _ strip _ re=re.com pile (u ' [ ^ _ u4e 00-_ u9fa 5a-za-z0-9 _.- ] )这就是添加了汉字的unicode的修正版正则

然后找到了secure_filename函数

那280行和282行有两个ascii,将其更改为utf-8

即,从

ifisinstance(filename,text_type ) : fromunicodedataimportnormalizefilename=normalize (nfkd ',filename ).encce

ifisinstance(filename,text_type ) : fromunicodedataimportnormalizefilename=normalize (nfkd ', filename ).encce 'ignore ' ) ifno tpy 2: filename=filename.decode (utf-8 ) )最后,在第286行中的_ filename _ ascii _ strii _ stred

filename=str (filename _ ascii _ strip _ re.sub (',' _'.join ) filename.split ) ) ).strip )。

filename=str (filename _ gbk _ strip _ re.sub (',' _'.join ) filename.split ) ).strip )._ ' )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。