Flask是支持文件上傳的, 近來(lái)做了一個(gè)上傳SQL文件的功能, SQL中會(huì)使用到中文, 泰文, 馬來(lái)西亞文等多種語(yǔ)言,
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站建設(shè)、成都做手機(jī)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。成都創(chuàng)新互聯(lián)擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺(jué)設(shè)計(jì)專才。
我們通過(guò)Flask接收到文件, 先把文件保存在后端, 保存后卻發(fā)現(xiàn)是亂碼.
from flask import request
from werkzeug.utils import secure_filename
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/' + secure_filename(f.filename))
...
通過(guò)上面一段代碼接收并保存中文文件會(huì)亂碼的.
如何解決呢?
首先考慮亂碼是如何產(chǎn)生的呢, 兩種不同的編碼方式導(dǎo)致的.
通過(guò)Python的chardet模塊的detect方法可以獲取到字符串的編碼方式
file = request.files.get('file')
sql_content = file.read()
encoding = chardet.detect(sql_content)['encoding']
我的項(xiàng)目中獲取的編碼方式是GB2312編碼
解決編碼錯(cuò)亂的問(wèn)題就是先正確解碼, 再重新編碼, 本項(xiàng)目中是先用GB2312解碼, 然后用UTF-8編碼. 如下:
sql_content = sql_content.decode('GB2312').encode('utf-8')
上面重新編碼后的sql_content的再重新寫(xiě)入文件對(duì)象, 然后保存就解決了中文亂碼的問(wèn)題.
file.truncate()
file.seek(0)
file.write(sql_content)
file.save('test.sql')
后臺(tái)之間保存文件的亂碼問(wèn)題解決后, 我們通過(guò)MINIO的SDK上傳的亂碼問(wèn)題也迎刃而解.
代碼全覽:
# 文件上傳接口
class DBTaskSQLFile(Resource):
# 新建文件
def post(self):
file = request.files.get('file')
file.seek(0)
sql_content = file.read()
encoding = chardet.detect(sql_content)['encoding']
sql_content = sql_content.decode(encoding).encode('utf-8')
file.truncate()
file.seek(0)
file.write(sql_content)
file.seek(0)
# SQL文件上傳至文件服務(wù)器
try:
pass
except Exception as err:
print('[MINIO]:', err)
return jsonify(code=1, msg='SQL文件上傳至文件服務(wù)器時(shí)失敗')
return jsonify(code=0, msg='Success')
文章名稱:Python基礎(chǔ)教程:Flask上傳文件(包含中文)保存后亂碼問(wèn)題解決
瀏覽地址:http://muchs.cn/article44/pdpeee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站營(yíng)銷、網(wǎng)站內(nèi)鏈、ChatGPT、網(wǎng)站制作、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)