2015-03-11 16 views
5

Ich frage mich, wie Sie Dateien hochladen, indem Sie einen API-Dienst erstellen?Flask-RESTful - Bild hochladen

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

Strecke

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

Und dann die HTML

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

I CORS auf der Serverseite

Ich bin mit Angularjs als front- aktiviert haben Ende und ng-upload wenn das m atters, kann aber auch CURL-Anweisungen verwenden!

+0

versuchen Sie es mit Blau Imp jQuery Datei hochladen https://github.com/blueimp/jQuery-File-Upload – iJade

+0

Hallo @iJade, ich bin mit Ang Ular als Front-End tho! Aber danke für die Empfehlung! Ich muss nur wissen, wie Sie das auf der Serverseite tun! :) – Sigils

+0

@Kasra, tut mir leid. Aber ich habe Kommentare darüber, dass es mit zu vielen Daten gefüllt ist! :( – Sigils

Antwort

7

Etwas in den Zeilen des folgenden Codes sollte helfen.

@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

Dies scheint nicht Flask-RESTful zu verwenden. –

+0

Nicht erholsam für mich auch – 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() 

sollten Sie den Stream verarbeiten, wenn es sich um eine wav war, den obigen Code funktioniert. Für ein Bild, sollten Sie auf der Datenbank speichern oder zu AWS S3 oder Google Storage laden

5

Die folgende genügt, um die hochgeladene Datei

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

Sie die Anfrage

von Kolben verwenden speichern
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/