2016-11-11 237 views
2

用python flask_restplus什么是正确的方式有一个帖子,并获得方法来获取和推送文件例如xlsx到服务器?Python restplus API上传和下载文件

是否需要使用marshaling

参考:https://philsturgeon.uk/api/2016/01/04/http-rest-api-file-uploads/

这个答案给一般信息,但不是在蟒蛇>瓶> restplus方面:REST API File Upload

+0

如果在单个帖子方法中获得多个类型/事件,我的意见不能以此模块样式成功。发送方法(文件上传)是'post',但我从来没有使用过这种方法,因为需要检查文件内容以便写入某处!在大文件上很复杂,需要与目标同步源代码(不能删除或只移动diff)。有时需要在源代码/ html-output上使用额外的修订版,以免丢失任何数据或escape_multiple_io操作。如果使用小尺寸文件,请使用Base64编码的bz2内容。大文件(这很大?(在你的服务器上))在创建/修改过程中遇到很多风险。 – dsgdfg

回答

2

首先,你需要配置一个解析器

# 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'} 

我希望这有助于。

+0

要以一种宁静的方式来做到这一点,我认为你应该首先创建一个文件对象,如下所示: 'POST/api/v1/file {“meta”:“some data”}' 然后你收到文件对象so: '{ “meta”:“some data”,“created_time”:“timestamp”,“id”:1}',然后使用PUT和文件的二进制文件添加附件:'PUT/api/v1/file/1 /附件' – samurai

+0

如果您使用简单的html表单进行PUT或POST – samurai