在Flask中上传图片

Teo*_*300 17 python image-uploading flask

我必须在我的项目目录的静态文件夹中上传一些图像,但我不知道如何对我的代码说.在下面的code.py中,我能够上传一个图像并将其存储在静态文件夹的同一级别的项目目录中,但我希望这个图像可以存储在INSIDE静态文件夹中.

@app.route('/uploader', methods = ['GET', 'POST'])
def upload_file():
   if request.method == 'POST':
      f = request.files['file']

      f.save(secure_filename(f.filename))
      return render_template('end.html')
Run Code Online (Sandbox Code Playgroud)

我该怎么办?多谢你们

PYA*_*PYA 19

你需要定义 upload folder

来自flask文档

import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '/path/to/the/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def upload_file():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # if user does not select file, browser also
        # submit a empty part without filename
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
Run Code Online (Sandbox Code Playgroud)

http://flask.pocoo.org/docs/0.12/patterns/fileuploads/

所以你的代码将是UPLOAD_FOLDER = '/path/to/static/images'或类似的东西

  • 这和链接对于使实现工作非常有帮助。谢谢 (3认同)
  • ```def allowed_file(文件名): 返回 '.' 在 filename 和 filename.rsplit('.', 1)[1].lower() 中 ALLOWED_EXTENSIONS``` (3认同)

yay*_*aya 16

  1. 你的表格enctype应该是multipart/form-data(否则它不起作用):
<form method="post" enctype="multipart/form-data">
...
</form>
Run Code Online (Sandbox Code Playgroud)
  1. 您应该指定上传文件夹(否则不起作用):

app.config['UPLOAD_FOLDER'] = '/path/to/the/uploads'

  1. 您应该为文件输入指定一个名称(否则它将不起作用):
<input type="file" name="file1">
Run Code Online (Sandbox Code Playgroud)
  1. 您应该使用 file 方法手动保存文件save()
path = os.path.join(app.config['UPLOAD_FOLDER'], file1.filename)
file1.save(path)
Run Code Online (Sandbox Code Playgroud)
  1. 简单完整的例子:
import os
from flask import Flask, request

UPLOAD_FOLDER = './upload'

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        if 'file1' not in request.files:
            return 'there is no file1 in form!'
        file1 = request.files['file1']
        path = os.path.join(app.config['UPLOAD_FOLDER'], file1.filename)
        file1.save(path)
        return path

        return 'ok'
    return '''
    <h1>Upload new File</h1>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file1">
      <input type="submit">
    </form>
    '''

if __name__ == '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)
  1. 详细的完整示例: https ://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/