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'
...
答案 0 :(得分:0)
This解决了。
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'