Curl

2013-06-26 27 views
13

'u kullanarak bir python flask sunucusuna dosya yükleme Bir dosyayı curl ve python flask kullanarak bir sunucuya yüklemeye çalışıyorum. Aşağıda, onu nasıl uygulayacağımın kodu var. Yanlış yaptığım şeyler hakkında herhangi bir fikir. AşağıdakiCurl

curl -i -X PUT -F name=Test -F [email protected] "http://localhost:5000/" 

@app.route("/", methods=['POST','PUT']) 
def hello(): 
    file = request.files['Test'] 
    if file and allowed_file(file.filename): 
     filename=secure_filename(file.filename) 
     print filename 

    return "Success" 

sunucu önceden geri

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>400 Bad Request</title> 
<h1>Bad Request</h1> 
<p>The browser (or proxy) sent a request that this server could not understand.</p> 

Teşekkür gönderdiği hatadır.

+1

Verilerinizi POST, örn. "curl -F" [email protected] "http: //127.0.0.1: 5000 'bu nedenle sorununuzu Flask'ta PUT taleplerini nasıl ele aldığınızı daraltmaktadır. – Doobeh

+0

Request.files'ın PUT ile çalışmadığını söyleyen bir parçayı hatırlıyorum. Bunun yerine request.data'yı deneyebilir misiniz? – codegeek

+0

Kodunuz iyi görünüyor, eğer deneyerseniz ne alırsınız: curl -X PUT -F [email protected] http: // localhost: 5000 – snahor

cevap

14

Kıvrılma komutunuz, iki form içeriği, filedata adında bir dosya ve name adında bir form alanı ilettiğiniz anlamına gelir. Yani bunu yapabilirsiniz:

file = request.files['filedata'] # gives you a FileStorage 
test = request.form['name']  # gives you the string 'Test' 

ama request.files['Test'] yok.

+0

dosyaları nasıl eklersiniz? –

+0

@DineshVG Sorunuzla ne kastettiğinizden emin değilim. Curl komutu, verilen dosya ile bir posta isteği gönderir veya sunucuya, gösterildiği gibi istek nesnesindeki rotada erişilebilecek form verilerini gönderir. – mata

+0

I aracılığıyla bir html sayfası var - bir ileti isteği göndermek - bir dosya ekleyerek Bir curl komutu kullanarak çalıştı, işe yaramadı. Daha sonra anladım ... İki anahtar-değer çifti vermeliydim. Biri dosyanın adı ve diğeri için dosya kendisi için. Ve işe koyuldu .. –