2015-03-11 5 views
5

Мне было интересно, как вы загружаете файлы, создавая службу API?Flask-RESTful - Загрузить картинку

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

Маршрут

api.add_resource(UploadImage, '/api/uploadimage/<string:fname>') 

И тогда HTML

<input type="file" name="file"> 

Я включил CORS на стороне сервера

Я использую angular.js, как фронт- конец и ng-upload, если это m а также могут использовать заявления CURL!

+0

попробовать использовать Синий Imp JQuery Файл Загрузить https://github.com/blueimp/jQuery-File-Upload – iJade

+0

Здравствуйте @iJade, я использую Ang ural как front-end tho! Но спасибо за рекомендацию! Мне нужно только знать, как вы это делаете на стороне сервера! :) – Sigils

+0

@ Kasra, извините. Но я получил комментарии о том, что он заполнен слишком большим количеством данных! :( – Sigils

ответ

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}) 
+4

Это не похоже на Flask-RESTful. –

+0

Не успокаиваю меня – Nabin

7
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() 

Вы должны обрабатывать поток, если это был WAV, код выше работ. Для изображения, вы должны хранить в базе данных или загрузить на AWS S3 или Google Storage

5

Следующая достаточно, чтобы сохранить загруженный файл

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") 
2

вы можете использовать запрос из колбы

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

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