2013-06-26 4 views
13

Я пытаюсь загрузить файл на сервер, используя флешку curl и python. Ниже приведен код того, как я его реализовал. Любые идеи о том, что я делаю неправильно.Загрузите файл на сервер флагов python с помощью curl

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" 

Ниже ошибка, что сервер отправляет обратно

<!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> 

Спасибо заранее.

+1

Ваш код работает, если вы отправляете данные, например. 'curl -F" [email protected] "http: //127.0.0.1: 5000', что сужает вашу проблему до того, как вы обрабатываете запросы PUT в Flask. – Doobeh

+0

Я помню какой-то поток, в котором говорится, что request.files не работает с PUT. Можете ли вы попробовать request.data? – codegeek

+0

Ваш код выглядит хорошо, что вы можете получить, если попытаетесь: curl -X PUT -F [email protected] http: // localhost: 5000 – snahor

ответ

14

Ваша команда curl означает, что вы передаете два содержимого формы, один файл с именем filedata и одно поле формы: name. Таким образом, вы можете сделать это:

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

но request.files['Test'] не существует.

+0

, как вы добавляете файлы? –

+0

@DineshVG Я не уверен, что вы имеете в виду под своим вопросом. Команда curl отправляет почтовый запрос с данным файлом или формой на сервер, на котором они могут быть доступны на маршруте объекта запроса, как показано. – mata

+0

У меня есть html-страница, через которую я - отправьте сообщение - путем прикрепления файла Я попробовал его с помощью команды curl, это не сработало. Я понял позже ... Мне пришлось дать две пары ключ-значение. Один для имени файла, а другой для самого файла. И заставил его работать. –