У меня есть форма, которая читает файл:
<form enctype="multipart/form-data" is="iron-form" method="post" action="http://localhost:7733/receivedoc" id="restForm" >
<px-file-upload
id="uploadComponentId"
message="Drag and drop files here, or click the button below."
multiple=false
accept=".xls,.xlsx">
</px-file-upload>
<button id="saveDataSetButton">
<i class="fa-briefcase">Generate Pacing File</i>
</button>
</form>
Здесь компонент px-file-upload
- это, по сути, просто повторная стилизация стандартного элемента HTML5 <input type=file>
, и я должен иметь возможность использовать его таким же образом - свойство files
px-file-upload
содержит FileList
массив, к которому я должен иметь возможность обращаться и обрабатывать запрос.
Я пытаюсь опубликовать файл с некоторым кодом NodeJS:
this.$.saveDataSetButton.addEventListener('click', function() {
console.log(uploadComponentId.files[0])
console.log('restForm.saveDataSetButton click')
restForm.submit();
});
Как и ожидалось, консоль отображает прикрепляемый файл (вывод консоли Chrome для console.log(uploadComponentId.files[0])
):
Файл (12233) {name: "testfile.xlsx", lastModified: 1522075602000,
lastModifiedDate: Mon Mar 26 2018 16:46:42 GMT + 0200 (CEST),
webkitRelativePath: "", размер: 12233,…}
Однако к моменту поступления запроса на сервер он уже пуст (см. Ниже). Я пытаюсь получить файл через сервер Flask (должен быть Flask, позже я сделаю Python для Excel):
UPLOAD_FOLDER = '/Users/user/Documents/flask_min'
ALLOWED_EXTENSIONS = set(['xls', 'xlsx'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/receivedoc', methods=['POST', 'GET'])
@crossdomain(origin='*')
def upload_file():
if request.method == 'POST':
print("In there")
print(request.files)
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['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(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return ('', 204)
Сервер получает запрос, но не может найти файл. Вывод консоли на сервере гласит:
Там
ImmutableMultiDict ([])
http://localhost:7733/receivedoc' [POST]>
127.0.0.1 - - [09 / May / 2018 15:15:23] "POST / receiveoc HTTP / 1.1" 302 -
127.0.0.1 - - [09 / May / 2018 15:15:23] "GET / receiveoc HTTP / 1.1" 204 -
Так что, очевидно, файловая часть не достигает сервера. Зачем? Что мне не хватает? Как я могу отправить файл?