首页 > 解决方案 > Flask同时上传图片和文字

问题描述

所以我在这里想要实现的是同时上传图像和文本。到目前为止它已经工作了,但是在 Flask 上,它request.files是空的。但是,request.form返回我这个:

ImmutableMultiDict([('description', u''), ('name', u''), ('file', u'image.jpg')])

当我这样做时type(request.form['file']),它以 unicode 形式返回。我如何使它可以显示图像request.files和文本request.form

<form class="form-area " id="" action="{{ url_for('templater.test') }}" method="post"  novalidate>
							
  <label for="name">Name</label>
  <input name="name" placeholder="Enter Name" type="text">

  <label for="description">Description</label>
  <input name="description" placeholder="Enter Description" type="text">

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

  <input type = "submit"/>
</form>

@templater.route('/test', methods=['GET', 'POST'])
def test():
    print request.form
    if request.method == 'POST':

        if 'file' not in request.form:
            print 'No file part'
            return redirect(request.url)
        file = request.form['file']

        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(main.app.config['UPLOAD_FOLDER'], filename))

    return jsonify({'status':'something'})

标签: flask

解决方案


您应该enctype在表单标签中指定属性:

<form class="form-area " id="" action="{{ url_for('templater.test') }}" method="post"  novalidate  enctype="multipart/form-data">

通过添加,您应该能够调用文件

 files = request.files.getlist('file')
 for file in files:
     [...]

其他输入仍以以下形式提供:

request.form.get('name')

推荐阅读