免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3881 | 回复: 4
打印 上一主题 下一主题

怎样用perl提供文件下载服务 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-24 15:44 |只看该作者 |倒序浏览
很菜的问题,不过从前确实没做过,问问有没有最优的实现方案。
就是,服务器上有一些文件,网页上有这些文件对应的链接,点击这些链接,用户可以将这些文件下载到本地。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
2 [报告]
发表于 2014-04-24 16:35 |只看该作者
  1. Mojolicious::Lite
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-04-24 16:48 |只看该作者
我有自己的HTTP server,应该不需要这么复杂的框架,只是想简单的提供文件下载,比如知道文件在服务器上的路径,服务器端脚本怎样来来提供该文件的下载?
回复 2# mcshell


   

论坛徽章:
0
4 [报告]
发表于 2014-04-24 17:46 |只看该作者
我现在的实现是这样:

用户点击页面上文件的链接时,触发一次Ajax请求,携带文件ID等参数;
服务器端的CGI脚本接收到请求后,解析ID参数,从文件服务器读出文件内容,直接将文件内容print到STDOUT;
HTTP Response header的一些参数设置如下:
Content-type: application/x-download
Content-Disposition: attachment; filename=xxxxx

现在通过网页调试工具查看HTTP会话,可以看到Response的Payload里已经有文件的数据,但是浏览器却没有触发文件下载,只是在Response的payload里有文件的数据。这个是哪配置的不对?急等。。。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
5 [报告]
发表于 2014-04-24 17:55 |只看该作者
本帖最后由 mcshell 于 2014-04-24 17:56 编辑

回复 3# cloudsurf


    复杂吗{:3_186:}  不是有简单的例子吗?
你把里面的地址改成服务器的路径不就行了
  1. use Mojolicious::Lite;

  2. # /with_block
  3. get '/with_block' => 'block';

  4. app->start("daemon","-l","http://*:80");
  5. __DATA__

  6. @@ block.html.ep
  7. % my $link = begin
  8.   % my ($url, $name) = @_;
  9.   Try <%= link_to $url => begin %><%= $name %><% end %>.
  10. % end
  11. <!DOCTYPE html>
  12. <html>
  13.   <head><title>Sebastians frameworks</title></head>
  14.   <body>
  15.     %= $link->('http://mojolicio.us', 'Mojolicious')
  16.     %= $link->('http://catalystframework.org', 'Catalyst')
  17.   </body>
  18. </html>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP