Я пытаюсь использовать FineUploader для загрузки большого количества файлов. Мне также нужно манипулировать файлами перед их загрузкой - а именно, мне нужно анонимизировать некоторую идентифицирующую информацию. В another answer, Ray Nicholus предложил отклонить исходный файл в обработчике onSubmit, а затем повторно добавить управляемый файл. Поэтому мой обработчик onSubmit выглядит так:Высокое использование памяти при загрузке и обработке большого количества файлов
onSubmit: function (id, name)
{
var file = this.getFile(id)
if (file.isAnonymized)
{
return;
}
var reader = new FileReader()
reader.onload = function()
{
var arrayBuffer = this.result
var byteArray = new Uint8Array(arrayBuffer)
// Manipulate the byteArray in some way...
var blob = new window.Blob([byteArray])
blob.isAnonymized = true
// add the anonymized file instead
uploader.addFiles({blob: blob, name: name})
}
reader.readAsArrayBuffer(file)
// cancel the original file
return false
},
Это прекрасно работает для небольшого количества файлов. В конкретном примере клиент попытался загрузить ~ 1.500 файлов по 3 МБ в Firefox и увидел, что использование памяти в Firefox пробило крышу, прежде чем вкладка в конечном итоге потерпела крах. Другие браузеры (Chrome, Edge) демонстрируют подобное поведение. Использование инструментов разработчика браузера, похоже, не показывает больших объемов памяти. Нет проблем при простой загрузке файлов как есть, но это не вариант.
Вы можете подумать о том, чтобы поместить его в WebWorker. – TryingToImprove
Некоторые библиотеки файлов js не предназначены для управления большим количеством файлов. XMLHttpRequest - это огромный и асинхронный объект. Обычно такая библиотека запускает все закачки в цикле for, который висит в браузере, когда вы помещаете более ~ 1000 файлов (поскольку он выделяет и пытается запустить 1000 одновременных подключений). Я предлагаю вам написать свою собственную часть загрузки. – Fefux
Как я уже сказал, просто загрузка работает как шарм, поэтому я уверен, что это не проблема. Это когда мне нужно заранее манипулировать файлами, чтобы начать боль. –