#javascript #vue.js #flask #websocket #flask-socketio
#javascript #vue.js #flask #websocket #flask-socketio
Вопрос:
Я ищу минимальный воспроизводимый пример того, как загрузить файл из Vue.js чтобы запустить серверную часть flask через websocket и сохранить ее там. Желательно с возможностью загрузки файлов большего размера (несколько сотен МБ)
шаблон:
<template>
<div>
<form id='upload-form'>
<input
id='file-field'
name='file'
type='file' @change="onFileChange">
</form>
<button @click="uploadFile">Upload</button>
</div>
</template>
Скрипт Vue:
export default {
name: "UploadFile",
data () {
return {
file: ''
}
},
methods: {
onFileChange (e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length) {
return
}
this.file = files;
},
uploadFile: function (e) {
console.log('File upload clicked')
this.$socket.emit('upload-file', this.file)
}
}
}
Фляжка:
# need to save file etc.
@socketio.on('upload-file')
def save_file(data):
print("Data received")
print(data)
Прямо сейчас в flak возникает ошибка при получении события загрузки файла. Ошибка появляется независимо от размера файла:
ошибка обработчика сообщений
Трассировка (последний последний вызов): Файл «~ib/python3.8/site-packages/engineio/server.py «, строка 549, в _trigger_event возвращает файл self.handlersevent «~lib/python3.8/site-packages/socketio/server.py «, строка 730, в _handle_eio_message, если pkt.add_attachment(данные): Файл «~lib/python3.8/site-packages/socketio/packet.py «, строка 118, в add_attachment вызывает ошибку ValueError(‘Неожиданное двоичное вложение’) Ошибка значения: неожиданное двоичное вложение
Комментарии:
1. Насколько велик ваш файл? Кроме того, обратите внимание, что вы сформулировали свой вопрос так, как будто вы выполняете загрузку файлов с помощью Flask, но это все сокет. Ввод-вывод, поэтому Flask не участвует в этом.
2. Протестировал его для файлов разных размеров (0 КБ, 100 КБ, 50 МБ), одно и то же сообщение об ошибке
3. Что это за тип
this.file
? Это фактические данные или файловый объект? Вы не можете создать файловый объект, вам нужно прочитать ваш файл и отправить фактические байты.4.
typeof this.file
возвращает «Объект»5. Можете ли вы зарегистрировать его, чтобы точно узнать, что в нем содержится?