web-dev-qa-db-ja.com

Flask

flaskでファイルをアップロードできます ploading Files

  1. _<form>_タグは_enctype=multipart/form-data_でマークされ、_<input type=file>_がそのフォームに配置されます。
  2. アプリケーションは、リクエストオブジェクトのファイルディクショナリからファイルにアクセスします。
  3. ファイルのsave()メソッドを使用して、ファイルシステムのどこかにファイルを永続的に保存します。

しかし、フォルダや一部のファイルをアップロードする方法がわかりません。検索したところ、 Flaskを使用した複数のファイルのアップロード が見つかりました。

ただし、それでもフォルダとそのフォルダに属するファイルをアップロードする方法がわかりません。

方法を教えていただけますか?


私が取り組んでいるディレクトリツリー:

_.
├── manage.py
├── templates
│   ├── file_upload.html
│   └── hello.html
└── uploads
    ├── BX6dKK7CUAAakzh.jpg
    └── sample.txt
_

アップロードファイルのソースコード:

_from flask import Flask,abort,render_template,request,redirect,url_for
from werkzeug import secure_filename
import os
app = Flask(__name__)
UPLOAD_FOLDER = './uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
@app.route('/')
def index():
    return redirect(url_for('hello'))

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name = None):
    return render_template('hello.html',name=name)

@app.route('/upload/',methods = ['GET','POST'])
def upload_file():
    if request.method =='POST':
        file = request.files['file']
        if file:
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
            return hello()
    return render_template('file_upload.html')


if __name__ == '__main__':
    app.run(debug = True)
_

ファイルのアップロード用テンプレート(manage.py):

_<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action='' method="POST" enctype="multipart/form-data">
    <p><input type='file' name='file[]' multiple=''>
    <input type='submit' value='upload'>
    </p>

</form>
_
13
SamuraiT
file = request.files['file']

に変更

file = request.files['file[]']
4
Satyaki Sanyal

ここでの問題は、フラスコのapp.configはそれ自体に相対的ではなく、絶対的であるということです。だからあなたが置くとき:

UPLOAD_FOLDER = './uploads' 

フラスコはこのディレクトリを見つけられず、500エラーを返します。次のように変更した場合:

UPLOAD_FOLDER = '/tmp'  

次にファイルをアップロードし、表示される/ tmp /ディレクトリに移動します。

ファイルを適切にアップロードするには、適切なディレクトリへのパスを編集する必要があります。

3
GHETTO.CHiLD