我想從我的服務器下載加密文件,解密並將其保存到本地。我想解密文件並在下載時將其寫入本地,而不是等待下載完成,解密並將解密後的文件放入錨標籤中。我想這樣做的主要原因是,對於大文件,瀏覽器不必在內存中存儲數百兆字節或幾千兆字節。JavaScript:寫入下載流
5
A
回答
3
這隻會有可能與服務工作者+的組合取+流 幾個瀏覽器有工人和獲取,但即使較少的支持與流獲取(閃爍)
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獲得流式響應,但它不是標準的,如果你使用它們,它就不會成爲mather(responseType = ms-stream || MOZ-分塊-arrayBuffer)因爲StreamSaver取決於取+ ReadableStream任何方式,不能以任何其他方式使用
以後你就可以做這樣的事情的時候WritableStream +變換流得到實施以及
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. 下載在ASP .NET中寫入響應流的文件C#
- 2. 使用JavaScript將PDF流寫入iFrame
- 3. java - 使用servlet下載輸入流
- 4. 流寫入異常
- 5. ResXResourceWriter不寫入流?
- 6. 將StringBuilder寫入流
- 7. 流星S3下載
- 8. Laravel 5.2流下載
- 9. 下載位圖並寫入現有的
- 10. 寫入和讀取文件的下載
- 11. WinRT StorageFile寫入下載文件
- 12. C#從下載中寫入資源
- 13. 在javascript中按下時寫入cookie?
- 14. Laravel 5文件下載:流()或下載()
- 15. 是否有可能讓nginx流下載當前正在寫入的文件?
- 16. 流星加載JavaScript函數DOM後載入
- 17. JavaScript下載器
- 18. 將PDF流寫入響應流
- 19. 如何將流寫入內存流?
- 20. 將PDF流寫入響應流
- 21. Angular2流星加載javascript
- 22. 加載JavaScript庫流星
- 23. 將流寫入RCDATA資源
- 24. 異步流寫入線程
- 25. 使用流寫入文本
- 26. node.js寫入http響應流
- 27. 寫入流時使用XmlDiffPatch
- 28. 寫入氣流日誌
- 29. 如何寫入雙工流?
- 30. 使用ClojureScript寫入流星
您是否有解密算法的數據? – guest271314
我打算使用AES。 – Hephaestious
您無法使用瀏覽器Javascript寫入用戶計算機上的文件。所以你不能做你想要達到的目標,除非你正在與Electron或類似的工作。 –