send_data不支持批量下载,只能单个下载,所以只能用js做,
send_data file.to_s, filename: File.basename(file)
download_media = (file) ->
window.open(file)
$('.batch-download-button').click ->
ids = new Array()
product_id = $(this).attr('data-pid')
$('.check_id').each ->
if $(this).prop('checked')
id = $(this).val()
ids.push(id)
if ids.length > 0
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
})
$.post(
'/download',
{pid: pid, id: ids},
(data) ->
if data?
if data.data.status == 'error'
console.log(1)
window.location.href = '/xxx'
else
#files = data.data
#for file in files
# download_media(file)
for id in ids
url = '/xxx/'+id
download_media(url)
window.location.reload()
)
window.open如果放在ajaz中,会被浏览器屏蔽,在网上看到说:
在ajax的回调方法中使用window.open()方法下载文件,浏览器会认为这不是用户主动触发的动作,所以是不安全的,故被浏览器拦截。
解决方案是把window.open()方法单独提到一个function中,在ajax回调方法中调用该function