【问题标题】:express download file via ajax通过ajax快速下载文件
【发布时间】:2014-04-24 00:16:18
【问题描述】:

我不能只下载一个文件来响应 ajax 发布请求。

$(function(){
  $('img.download').click(function() {
    var image_path = $(this).attr('class').split(" ")[1]
    $.ajax({url:'/download',type:'POST',data:{image_path:image_path}})
  })    
})

Node.js 代码

app.post('/download',function(req,res){
  //var image_path = req.body.image_path
  //var filename = 'new.png'
  res.set({
    'Content-Type': 'application/octet-stream',
    'Content-Disposition': 'attachment;filename=\"new.png\"'
  })
  //res.set('Content-type', 'image/png')
  //var filestream = fs.createReadStream('public/uploads/new.png')
  //filestream.pipe(res)
  res.download('public/uploads/new.png')
})

【问题讨论】:

  • 我可以通过 res.download() 下载。它给你什么错误?

标签: ajax node.js express


【解决方案1】:

您似乎希望单击图像来触发下载对话框。如果是这种情况,请不要使用 Ajax。发送帖子并让浏览器处理对话框。可以通过创建一个简单的表单来完成作为点击结果的发布。

$("img.download").click(function () {
  var image_path = $(this).attr('class').split(" ")[1];
  var form = $('<form>', {action: '/download', method: 'POST'});
  form.append($('<input>', {name: 'image_path', value: image_path}));
  form.submit();
});

(请注意,在您的示例中,内容处置的res.set 将在res.download 中被覆盖。这基本上就是res.download 所做的一切;它设置内容处置,然后调用sendfile。 )

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2014-12-23
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2015-03-28
    • 2011-10-03
    • 2023-03-16
    相关资源
    最近更新 更多