Я хочу загрузить зашифрованный файл с моего сервера, расшифровать его и сохранить его локально. Я хочу расшифровать файл и записать его локально, поскольку он загружается, а не ждать завершения загрузки, дешифрования и затем дешифрования файла в привязном теге. Основная причина, по которой я хочу это сделать, - это то, что при больших файлах браузеру не нужно хранить сотни мегабайт или несколько гигабайт в памяти.JavaScript: Запись для загрузки потока
ответ
Это только будет возможно с помощью комбинации службы работника + выборки + потока Несколько браузера имеет рабочий и принести, но еще меньше поддержки выборку с потоковым (Blink)
new Response(new ReadableStream({...}))
У меня есть встроенный потоковый файл заставки Lib для связи с сервисным работником в другой, чтобы перехватить запрос сети: StreamSaver.js
Это немного отличается от потока узла здесь является примером
function unencrypt(){
// should return Uint8Array
return new Uint8Array()
}
// We use fetch instead of xhr that has streaming support
fetch(url).then(res => {
// create a writable stream + intercept a network response
const fileStream = streamSaver.createWriteStream('filename.txt')
const writer = fileStream.getWriter()
// stream the response
const reader = res.body.getReader()
const pump =() => reader.read()
.then(({ value, done }) => {
let chunk = unencrypt(value)
// Write one chunk, then get the next one
writer.write(chunk) // returns a promise
// While the write stream can handle the watermark,
// read more data
return writer.ready.then(pump)
)
// Start the reader
pump().then(() =>
console.log('Closed the stream, Done writing')
)
})
Есть также два других способа, с помощью которых вы можете получить потоковый ответ с помощью xhr, но он не является стандартным и не маскируется, если вы используете их (responseType = ms-stream || Мос-фрагментированный-ArrayBuffer) Потому что StreamSaver зависит от выборки + ReadableStream любых путей и не может быть использован каким-либо другим способом
Позже вы сможете сделать что-то вроде этого, когда WritableStream + Transform потоков получают реализован, а
fetch(url).then(res => {
const fileStream = streamSaver.createWriteStream('filename.txt')
res.body
.pipeThrogh(unencrypt)
.pipeTo(fileStream)
.then(done)
})
Также стоит упомянуть, что менеджер загрузки по умолчанию обычно связан с загрузкой фона, поэтому ppl иногда закрывает вкладку, когда видит загрузку. Но все это происходит в основном потоке, поэтому вам нужно предупредить пользователя, когда они уходят
window.onbeforeunload = function(e) {
if(download_is_done()) return
var dialogText = 'Download is not finish, leaving the page will abort the download'
e.returnValue = dialogText
return dialogText
}
- 1. WebRequest для загрузки XML-потока
- 2. Запись потока файлов во время загрузки файла - node.js & node-formidable
- 3. Запись потока в android.
- 4. Запись входящего потока mjpeg?
- 5. Запись потока RTSP
- 6. Запись данных json для запроса потока
- 7. Закрытие потока Чтение и запись потока при выходе формы
- 8. Javascript для загрузки файла
- 9. Следующий Javascript для загрузки
- 10. Javascript для загрузки String
- 11. Запись RestSharp ByteArray/Данные потока
- 12. Запись потока данных в PostGreSQL
- 13. Запись потока gz с boost
- 14. Запись потока PDF в iFrame с использованием JavaScript
- 15. Отслеживание загрузки потока в Java
- 16. Запись в журналы воздушного потока
- 17. Запись потока в файл excel
- 18. Запись потока объектов в файл
- 19. Запись потока в ресурс RCDATA
- 20. Запись потока памяти в файл
- 21. Запись потока MJPEG на диск
- 22. Запись потока в gridfs-поток
- 23. Запись mod_rewrite для загрузки определенного файла
- 24. запись и чтение из байтового потока
- 25. тест Запись для JavaScript Promise
- 26. запись потока сетевого потока из одного и того же сокета
- 27. HTML 5 запись видео и сохранение потока
- 28. Javascript: set filename для загрузки
- 29. Javascript для загрузки HTML код
- 30. Необязательное поле для загрузки javascript
У вас есть алгоритм дешифрования данных? – guest271314
Я планирую использовать AES. – Hephaestious
Вы не можете писать файлы на компьютере пользователя в браузере Javascript. Таким образом, вы не можете делать то, что вы пытаетесь достичь, если не работаете, скажем, с электроном или с чем-то похожим. –