>ActiveJob 在 Tempfile 中生成一个 zip,将其数据读取到变量,在作业完成后,将 Base64 编码的数据广播到客户端,客户端通过 saveAs 下载数据
最终结果无法解压缩/已损坏。
我怀疑编码/解码时会丢失一些东西,zip 创建方法以前在控制器中工作过,但无法在生产中使用,因为显然,它花了太长时间,所以我尝试了这种方法,我只是无法让它工作。
工作的相关部分:
...
zip_data = File.read(temp_file.path)
encoded_zip_data = Base64.encode64(zip_data)
ActionCable.server.broadcast(
"export_channel_#{uuid}", { zip: encoded_zip_data }
)
...
处理接收数据的咖啡的相关部分:
...
received: (data) ->
blob = new Blob([ window.atob data.zip ], {
type: "application/zip"
})
saveAs blob, 'data.zip'
...
这解决了。
str2bytes = (str) ->
bytes = new Uint8Array(str.length)
i = 0
while i < str.length
bytes[i] = str.charCodeAt(i)
i++
bytes
添加上述内容并在我的接收函数中执行此操作
received: (data) ->
blob = new Blob([ str2bytes(window.atob(data.zip)) ], {
type: "application/zip"
})
saveAs blob, 'data.zip'