您当前的位置: 首页 >  http

龚建波

暂无认证

  • 2浏览

    0关注

    312博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt实现HTTP文件上传下载(Flask服务端)

龚建波 发布时间:2021-08-07 18:28:19 ,浏览量:2

接上一篇 Qt HTTP 基本操作:https://blog.csdn.net/gongjianbo1992/article/details/97568863

1.准备服务端测试代码

只需要上传和下载两个接口,实际应用时可能还需要 token 验证之类的,而且也没有对文件传输结果进行校验。

#using flask 2.0.1
import os,sys
from flask import Flask,request,jsonify,send_file,send_from_directory

app = Flask(__name__)
filename_temp = ''
BASE_PATH=os.path.join(os.path.dirname(os.path.abspath(__file__)),'upload')

#测试
@app.route('/',methods=['GET','POST'])
def hello():
    return '

Hello!

' #上传 @app.route('/upload',methods=['POST']) def upload_file(): try: global filename_temp f = request.files['myfile'] filename_temp = f.filename print('upload file:'+f.filename) f.save(os.path.join(BASE_PATH,f.filename)) return jsonify({ 'filename':f.filename, 'fileid':0 #假装对每个文件返回一个id,然后通过id再下载 }) except Exception as e: print('error:'+str(e)) return jsonify({'error':0}),0 #下载 @app.route('/download/',methods=['GET']) def download_file(fileid): try: global filename_temp print('download file:'+filename_temp) #假装是通过id从数据库拿到的文件 return send_from_directory(BASE_PATH,filename_temp,as_attachment=True) except Exception as e: print('error:'+str(e)) return jsonify({'error':0}),0 if __name__ == '__main__': print('server runing... ...') if not os.path.exists(BASE_PATH): os.makedirs(BASE_PATH) app.run(host='127.0.0.1',port=12345,debug=True)
2.文件上传

传文件主要是借助 QHttpMultiPart 类,并设置 Content-Type 为 multipart/form-data。我用 Flask 测试的时候,要给 QHttpPart 设置 multipart/form-data ,Flask 的 request.files 才能拿到 form-data 的 filename 等信息。

form-data 里的 name 设置为某个值如 "myfile" 后,Flask 里可以用 request.files['myfile'] 获取到这个 part,进而拿到设置的 filename。

注意 get/post 返回的 QNetworkReply 需要自己释放,Qt 5.14 可以设置 QNetworkAccessManager 的 setAutoDeleteReplies(true) 自动释放,Qt 5.15 又新增了 setTransferTimeout 设置超时时间。

有些情况还需要设置 QHttpMultiPart 的 boundary,不过我这个测试 demo 暂时用不到。

void HttpManager::upload(const QString &url, const QString &filepath)
{
    qDebug()            
关注
打赏
1655829268
查看更多评论
0.0658s