微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 在Mojolicious中下载文件

简单的问题.我在我的mojolicIoUs应用程序中生成一个.doc文件.我想下载它.这是我的问题,如何让浏览器下载它?

我正在使用CPAN模块MsOffice::Word::HTML::Writer生成文档.

这是我的mojolicIoUs应用程序中的子例程,它由Jquery中的Ajax请求调用

sub down_doc {
  my $self = shift;

  my $doc = MsOffice::Word::HTML::Writer->new(
    title => "My new Doc",
    WordDocument => {View => 'Print'},
  );

  $doc->write("Content and Stuff");

  my $save = $doc->save_as("/docs/file.doc");

  $self->res->headers->content_disposition("attachment;filename=file.doc");
  $self->res->headers->content_type('application/msword');

  $self->render(data => $doc->content);
}

这是我在Jquery中的Ajax请求:

var request = $.ajax({
  url: "/down_doc",
  type: "post",
  data: {'data': data},
});

request.done(function(response, textStatus, jqXHR) {
  window.location.href = response;
});

我知道我的Ajax“完成”处理程序是错误的,我只是在试验.如何让我的网页提示保存并下载.doc文件

解决方法:

这在服务器端确实不是问题,而是在不使用(相对较新的)File API的情况下无法保存来自ajax请求的响应.我建议用临时形式替换ajax:

$('<form method="post" action="/down_doc">') 
    .append( 
       $('<input type="hidden" name="data">')
          .attr("value", JSON.stringify(data))
    )
    .appendTo('body') 
    .submit();

提交表单并且/ down_doc处理程序使用相应的content-disposition标头和文档数据进行回复时,浏览器将执行处理文件保存的工作.

如果您不打算在请求后使用服务器上的文件,则可以删除此行:

my $save = $doc->save_as("/docs/file.doc");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐