无法在烧瓶中保存上传的txt文件

时间:2021-01-11 13:02:46

标签: python html flask flask-uploads

我是烧瓶新手。我正在尝试进行用户导入并将其保存在后端。我未能保存文件(我看不到静态上传的文件),因此无法从文件中读取。任何人都可以提出解决方案吗?谢谢。

错误:FileNotFoundError:[Errno 2] 没有这样的文件或目录:'static/uploadsDB/Reviews.txt'

我的 app.py:

#flask packages
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_bootstrap import Bootstrap 
from flask_uploads import UploadSet,configure_uploads,IMAGES,DATA,ALL

#systems
import os 
from werkzeug.utils import secure_filename
import spacy

app = Flask(__name__)
Bootstrap(app)
#db = SQLAlchemy(app)

# Configuration for File Uploads
files = UploadSet('files',ALL)
app.config['UPLOADED_FILES_DEST'] = 'static/uploadsDB'
configure_uploads(app,files)

# Spacy packages
nlp = spacy.load("en_core_web_sm")

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST','GET'])
def upload():
    if request.method == 'POST' and 'txt_data' in request.files:
        num_sentences = request.form['num_sentences']
        file = request.files['txt_data']
        filename = secure_filename(file.filename)
        # os.path.join is used so that paths work in every operating system
        # file.save(os.path.join("wherever","you","want",filename))
        file.save(os.path.join('static/uploadsDB',filename))
        fullfile = os.path.join('static/uploadsDB',filename)
        text_file = open(os.path.join('static/uploadsDB',filename), "r").read()
        nlp_file_doc = nlp(text_file)
        sentences = list(nlp_file_doc.sents)
        return render_template('annotation.html', sentences = sentences)

我的 index.html:

<div class="container">
          <div class="main">
              <div class="row">
                <div class="col-md-8" style="background-color:#ecb164">
                  <h3 style="color:#fff">Step 1: Upload your dataset</h3>
                    <p style="color:#fff">This tool only accept <ins>txt</ins> format text data </p>
                    <p style="color:#fff">Every sentence should either separate with punctuation or  </p>
                      <form method=POST enctype=multipart/form-data action="{{ url_for('upload') }}" class="form-group">
                        <div class="form-group">
                          <input type="file" name="txt_data">
                          <h3 style="color:rgb(255, 255, 255)">Step 2: Input lines of sentences you have processed</h3>
                            <p style="color:#fff"> Please enter 0 if this is your first attempt </p>
                        <form method=POST action="{{ url_for('upload') }}" class="form-group">
                        <input type="text" name="num_sentences" value=0>

1 个答案:

答案 0 :(得分:0)

问题是文件没有被保存。

这是有问题的行:

file.save(os.path.join('static/uploadsDB',filename))

此处,file 指的是表单数据,但当您使用 Flask-Uploads 或其后继 Flask-Reuploaded 时,UploadSet 负责保存文件。

并且您命名了您的 UploadSet 文件

此外,由于您已配置路径已保存文件 ( app.config['UPLOADED_FILES_DEST'] = 'static/uploadsDB' ),因此您无需再次重复此信息。

因此,为了保存文件,您只需使用以下代码:

files.save(file)

saveUploadSet 方法也接受参数 name

如果你想给保存的文件一个任意的名字,你可以写...

files.save(file, name="some_name")

如果您想了解有关 Flask-Reuploaded 的更多信息,您可以随时查看 source code

您还可以在 werkzeug documentation 中了解有关表单结果所用数据结构的更多信息。

相关问题