从 werkzeug.datastructures.FileStorage 计算 md5,但将对象保存为文件为空

Calculate md5 from werkzeug.datastructures.FileStorage, but saving the object as file is empty

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if form.validate_on_submit():
        #get pdf file
        pdffile = form.pdfupload.data
        #next line causes exception
        filemd5 = hashlib.md5()
        filemd5.update(pdffile.read())
        filemd5name = filemd5.hexdigest()
        #next save file
        pdffile.save(filemd5name+'.pdf')

不幸的是,在 hashlib.md5 之后,文件 md5name+'.pdf' 为空。

有没有办法从文件中获取md5并保存整个文件?

因为您已经对文件流执行了read,您需要seek回到文件的开头才能成功保存它。

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if form.validate_on_submit():
        #get pdf file
        pdffile = form.pdfupload.data
        #next line causes exception
        filemd5 = hashlib.md5()
        filemd5.update(pdffile.read())
        filemd5name = filemd5.hexdigest()
        #next save file
        pdffile.seek(0)
        pdffile.save(filemd5name+'.pdf')