Flask-RESTful - 上传图片

Sig*_*ils 13 python flask flask-restful

我想知道如何通过创建API服务上传文件?

class UploadImage(Resource):
    def post(self, fname):
        file = request.files['file']
        if file:
            # save image
        else:
            # return error
            return {'False'}
Run Code Online (Sandbox Code Playgroud)

路线

api.add_resource(UploadImage, '/api/uploadimage/<string:fname>')
Run Code Online (Sandbox Code Playgroud)

然后是HTML

   <input type="file" name="file">
Run Code Online (Sandbox Code Playgroud)

我在服务器端启用了CORS

我使用angular.js作为前端和ng-upload,如果这很重要,但也可以使用CURL语句!

Sib*_*ini 15

class UploadWavAPI(Resource):
    def post(self):
        parse = reqparse.RequestParser()
        parse.add_argument('audio', type=werkzeug.FileStorage, location='files')

        args = parse.parse_args()

        stream = args['audio'].stream
        wav_file = wave.open(stream, 'rb')
        signal = wav_file.readframes(-1)
        signal = np.fromstring(signal, 'Int16')
        fs = wav_file.getframerate()
        wav_file.close()
Run Code Online (Sandbox Code Playgroud)

您应该处理流,如果它是一个wav,上面的代码可以工作.对于图像,您应该存储在数据库中或上传到AWS S3或Google Storage


Ron*_*lev 15

以下内容足以保存上传的文件

    from flask import Flask
    from flask_restful import Resource, Api, reqparse
    import werkzeug

    class UploadAudio(Resource):
      def post(self):
        parse = reqparse.RequestParser()
        parse.add_argument('file', type=werkzeug.datastructures.FileStorage, location='files')
        args = parse.parse_args()
        audioFile = args['file']
        audioFile.save("your_file_name.jpg")
Run Code Online (Sandbox Code Playgroud)

  • 应该提到如何使用该 API:这是一个 `curl` 示例:`curl -v -X POST -H "Content-Type: multipart/form-data" -F "file=@test.zip" http ://localhost:8080/api/maintenance/update` 使用 application/octet-stream 作为内容类型对我来说不起作用...... (3认同)

iJa*_*ade 7

以下代码的内容应该有所帮助.

 @app.route('/upload', methods=['GET', 'POST'])
 def upload():
    if request.method == 'POST':
        file = request.files['file']
        extension = os.path.splitext(file.filename)[1]
        f_name = str(uuid.uuid4()) + extension
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], f_name))
        return json.dumps({'filename':f_name})
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不使用Flask-RESTful. (8认同)

小智 5

您可以使用烧瓶中的请求

class UploadImage(Resource):
    def post(self, fname):
        file = request.files['file']
        if file and allowed_file(file.filename):
            # From flask uploading tutorial
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file', filename=filename))
        else:
            # return error
            return {'False'}
Run Code Online (Sandbox Code Playgroud)

http://flask.pocoo.org/docs/0.12/patterns/fileuploads/