文件下载
Posted 开尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件下载相关的知识,希望对你有一定的参考价值。
做项目过程中,不可避免的会使用到下载功能,本文实现了从ftp文件服务器下载文件指定文件。具体操作如下:
前提是需要下载的文件已经放在了指定的ftp文件服务器上面。
view层:页面上提供下载按钮,供用户对指定文档进行下载。
代码如下:
<td><a class="btn btn-primary btn-small-height " href="/documents/download?type=document&file_name=<%= URI::escape(document[:file])%>">下载</a></td>
注释:
1、这里指定了下载的文件名称file_name,同时对文件名进行了转义编码,避免url中出现特殊字符,
2、因为这里提供文档下载和工具包下载,所以我这里多传了一个参数type,如果用不到则不必要传。
controller层代码:
1 def download 2 type = params[:type] 3 file = params[:file_name] 4 is_dir_exist = File.directory?\'public/download_documents\' 5 if !is_dir_exist 6 Dir::mkdir \'public/download_documents\' 7 end 8 path = File.join("public/download_documents", file) 9 begin 10 upload_cmd(SysUtils::FILE_SERVER[:host], SysUtils::FILE_SERVER[:user], SysUtils::FILE_SERVER[:passwd]) do |conn| #连接ftp文件服务器 11 conn.chdir("/platform_tools/document") #切换到存放文件的目录 12 conn.getbinaryfile(file, "public/download_documents/#{file}") 13 send_file(path,filename: CGI::escape(CGI::unescape("#{file}"))) 14 end 15 rescue Exception=> e 16 flash[:error] = "下载失败,请稍后重试!" 17 redirect_to document_download_documents_path 18 SysUtils.send_mail((SysUtils::MAIL_TO+[current_user.email]).uniq, "资料下载失败!", "#{$!}, #{e}") 19 end 20 Thread.new do #这里另起一个线程删除下载到本地的文件 21 sleep 100 22 File.delete(path) 23 end 24 end
主要实现思路是:从ftp文件服务器下载指定文件到当前项目根目录的public文件夹下面,这里在public文件夹下面新建了一个文件夹download_documents文件夹,作为临时中转文件夹,然后使用send_file方法输出该文件。这样用户就可以得到目的文件了。
最后,因为从ftp文件服务器上面读取文件到本地指定目录,这样本地项目就会增大,所以需要将下载的文件进行删除。这里当该文件输出之后,就另起了一个线程将项目目录上面的这个文件删除。
以上是关于文件下载的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途