2015-03-11 8 views
5

Mi chiedevo come caricare i file creando un servizio API?Flask-RESTful - Carica immagine

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

percorso

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

E poi il codice HTML

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

Ho permesso CORS sul lato server

Sto usando angular.js come front- fine e ng-upload se questo m atters, ma può usare anche le dichiarazioni di CURL!

+0

provare a utilizzare File Blu Imp jQuery Carica https://github.com/blueimp/jQuery-File-Upload – iJade

+0

Ciao @iJade, io sto usando Ang ulare come front-end! Ma grazie per la raccomandazione! Ho solo bisogno di sapere come lo fai dal lato server! :) – Sigils

+0

@Kasra, mi dispiace. Ma ho ricevuto commenti sul fatto che è pieno di troppi dati! :( – Sigils

risposta

7

Qualcosa sulle linee del seguente codice dovrebbe aiutare.

@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

Questo non sembra utilizzare Flask-RESTful. –

+0

Non male anche a me – 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() 

Si dovrebbe elaborare il flusso, se fosse un wav, il codice precedente funziona. Per un'immagine, è necessario memorizzare nel database o caricare su AWS S3 o Google Storage

5

Quello che segue è sufficiente per salvare il file caricato

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

è possibile utilizzare la richiesta dalla boccetta

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/