用于上载和下载文件的Python restplus API
使用python,使用post和get方法获取文件(例如xlsx)并将其推送到服务器的正确方法是什么 是否需要为此使用此选项 参考:用于上载和下载文件的Python restplus API,python,rest,upload,flask-restplus,Python,Rest,Upload,Flask Restplus,使用python,使用post和get方法获取文件(例如xlsx)并将其推送到服务器的正确方法是什么 是否需要为此使用此选项 参考: 这个答案提供了一般信息,但不是在python>flask>restplus上下文中:首先需要配置解析器 # parsers.py import werkzeug from flask_restplus import reqparse file_upload = reqparse.RequestParser() file_upload.add_argument('
这个答案提供了一般信息,但不是在python>flask>restplus上下文中:首先需要配置解析器
# parsers.py
import werkzeug
from flask_restplus import reqparse
file_upload = reqparse.RequestParser()
file_upload.add_argument('xls_file',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='XLS file')
然后将新资源添加到api命名空间中
# api.py
import …
import parsers
@api.route('/upload/')
class my_file_upload(Resource):
@api.expect(parsers.file_upload)
def post(self):
args = parsers.file_upload.parse_args()
if args['xls_file'].mimetype == 'application/xls':
destination = os.path.join(current_app.config.get('DATA_FOLDER'), 'medias/')
if not os.path.exists(destination):
os.makedirs(destination)
xls_file = '%s%s' % (destination, 'custom_file_name.xls')
args['xls_file'].save(xls_file)
else:
abort(404)
return {'status': 'Done'}
我希望这能有所帮助。如果在一篇文章中有多个类型/事件的方法,我的观点就不能成功使用这种模块样式。发送方法(文件上传)是
post
,但我从未使用过这种方法,因为我需要检查文件内容以便在某处写入!在大文件上比较复杂,需要同步源和目标(不删除或移动,只做区分)。为了不丢失任何数据或转义多个io操作,需要在源代码/html输出上使用额外的修订。如果文件较小,请使用Base64编码的bz2内容。大文件(在您的服务器上)在创建/修改过程中有很多风险。要以restful的方式执行此操作,我认为您应该首先创建一个文件对象:POST/api/v1/file{“meta”:“some data”}
然后您收到文件对象:{“meta”:“some data”,“created_time”:“timestamp”,“id”:1}
,然后使用文件的二进制文件PUT添加附件,因此:PUT/api/v1/file/1/attachment
PUT或POST(如果使用简单html)form@samurai我同意这通常是一条路要走。但是,这种方法的问题在于Flask RESTPlus不支持将二进制blob作为请求体直接传递(Swagger 2.0也不支持)。相反,我们必须求助于使用他在回答中建议的表单数据方法k3z——至少如果我们希望使用招摇来描述文件上传API(尤其是请求的预期内容类型
)。