RomanDillerNsk
@RomanDillerNsk
JavaScript

Как загружать файлы из браузера js + ajax + nodejs?

Коллеги доброго времени суток,
Прошу помощи у знатоков, как загружать файлы и сохранять их на сервере, на диске???
Проект на nodejs.

Файлы png, jpeg, jpg, pdf. Соответственно нужно определить тип файла его имя и размер, а потом так же сохранить у себя. Задача видимо тривиальная но столкнулся и не могу решить.

вот html:

<form name="uploadMatricula" enctype="multipart/form-data" method="POST">
									<label class="tramite">
										Загрузить
										<input type="file" id="matriculaFile" name="myfile" accept=".jpg,.jpeg,.png,.pdf" multiple>
									</label>
								</form>


вот клиент js в браузере:

let input = document.getElementById('upload');

		input.addEventListener('change', () => {

			let files = input.files;
			let wrong = false;

			if (files.length !== 1) {

				this.eventEmitter.emit('popupManager:showTooltip', 'Можно грузить только один файл!');
				return;

			}

			if (!this.checkFileFormat(files[0])) {

				this.eventEmitter.emit('popupManager:showTooltip', 'Не верный формат файла!');
				return;

			}

			if (files[0].size > this.fileSizeLimit) {

				this.eventEmitter.emit('popupManager:showTooltip', 'Слишком большой файл, не больше 20мб грузите!');
				return;

			}

			let fileData = {

				name: files[0].name,
				size: files[0].size,
				type: files[0].type

			}

			let form_data = new FormData();
			form_data.append('file', files[0]);

			transport.uploadFile(form_data, files[0].type, (result) => {

				console.log(result);

			});

		});


собственно код из trancport:

static uploadFile(fileData, header, callback) {

		let xhr = new XMLHttpRequest();

		xhr.open("POST", '/api/upload', true);
		xhr.setRequestHeader('Content-Type', header);
		xhr.send(fileData);

		xhr.onreadystatechange = () => {

			if (xhr.readyState !== 4) return;

			if (xhr.status >= 200 && xhr.status < 400) {

				let json = (xhr.responseText !== '') ? JSON.parse(xhr.responseText) : '';

				callback(json);

			} else callback();

		}

	}


Заранее благодарю за помощь.
  • Вопрос задан
  • 425 просмотров
Решения вопроса 1
megafax
@megafax
web-программист
продублирую и коментов выше

mime-types
Mime-type файла в Node.js
а для сохранения busboy
-----
еще решение
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы