0

我在 html/php 中创建了一个表单,并使用烧瓶作为后端。

一切正常,除了当我尝试上传图片时,我总是看到错误:

error is**"UnboundLocalError: local variable 'filename' referenced before assignment"**

我的flaskapp代码片段是

@app.route('/apple', methods=['GET', 'POST'])
def apple():
  onlineAppForm = RegForm()
  if request.method == 'POST':
    try:
        file = request.files['file']
        if file and allowed_file(file.filename):
           filename = secure_filename(file.filename)
           file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
    except Exception as e:
        print "Form without file "+str(e)
    return render_template("apply2.html", data=data, filename=filename, form=onlineAppForm)

这是我的上传文件夹

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

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.secret_key = os.urandom(24)

我没有得到错误在哪里。

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS

这是我的表格

<tr>
    <td class="sectionheading">Upload Scanned Copies</td>
</tr>
<tr>
    <td height="12">&nbsp;</td>
</tr>
<tr id="photosignthumb_span" height="40">
    <td align="left" valign="middle" width="100%">&nbsp;<b>
        <span class="mandatory">*</span>
        Please upload scanned copies of your photo </b>
        <input type="file" name="photo" id="photofile"  
         method="post"/><br>
        Please upload your recent passport size photograph:max 
        80KB(Only JPEG and JPG formats)
    </td>
</tr>
<tr id="photosignthumb_span" height="40">
    <td align="left" valign="middle" width="100%">&nbsp;<b>
        <span class="mandatory">*</span>
        Please upload scanned copies of your signature </b> 
        <input type="file" name="sign" id="signfile" 
        method="post"/><br>
        Please upload your recent passport size photograph:max 
        80KB(Only JPEG and JPG formats)
    </td>
</tr>
4

1 回答 1

0

filename存在取决于几个条件:

1 - file = request.files['file']
2 - if file and allowed_file(file.filename):
3 -未引发异常。

因此,如果上述任何一项都没有发生,那么filename就不会出现,因此您的错误消息也不会出现。

编辑:

引用文件上传的flask 文档:

  1. 一个标签被标记为 enctype=multipart/form-data 并且一个被放置在那个表单中。
  2. 应用程序从请求对象的文件字典中访问文件。
  3. 使用文件的 save() 方法将文件永久保存在文件系统的某个位置。

查看您提供的表格,您似乎没有任何form障碍,您应该有以下内容:

<form action="/apple" method="post" enctype="multipart/form-data">
<tr>
    <td class="sectionheading">Upload Scanned Copies</td>
</tr>
<tr>
    <td height="12">&nbsp;</td>
</tr>
<tr id="photosignthumb_span" height="40">
    <td align="left" valign="middle" width="100%">&nbsp;<b>
        <span class="mandatory">*</span>
        Please upload scanned copies of your photo </b>
        <input type="file" name="photo" id="photofile"  
         method="post"/><br>
        Please upload your recent passport size photograph:max 
        80KB(Only JPEG and JPG formats)
    </td>
</tr>
<tr id="photosignthumb_span" height="40">
    <td align="left" valign="middle" width="100%">&nbsp;<b>
        <span class="mandatory">*</span>
        Please upload scanned copies of your signature </b> 
        <input type="file" name="sign" id="signfile" 
        method="post"/><br>
        Please upload your recent passport size photograph:max 
        80KB(Only JPEG and JPG formats)
    </td>
</tr>
</form>
于 2016-07-30T18:29:13.583 回答