java下载文件



struts xml配置

<action name="download" class="com.unmi.action.DownloadAction">    
     <result name="success" type="stream"><!--type 为 stream 应用 StreamResult 处理-->    
         <param name="contentType">application/octet-stream</param><!--默认为 text/plain-->    
             
         <!-- 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,    
               比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 -->    
         <param name="inputName">inputStream</param>    
             
         <!-- 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文    
               件保有存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名,    
               这里使用的是动态文件名,${fileName}, 它将通过 Action 的 getFileName() 获得文件名 -->    
         <param name="contentDisposition">attachment;filename="${fileName}"</param>    
         <param name="bufferSize">4096</param><!-- 输出时缓冲区的大小 -->    
     </result>    
</action> 



java代码


import java.io.*;    
 import java.text.*;    
 import java.util.Date;    
     
 /**   
  * 文件下载的 Action    
  * @author Unmi   
  */    
 public class NetbookSerialAction {    
     
     public String execute() throws Exception {    
         //这里可加入权限控制    
         return "success";    
     }    
     
     //获得下载文件的内容,可以直接读入一个物理文件或从数据库中获取内容    
     public InputStream getInputStream() throws Exception {    
         //return new FileInputStream("somefile.rar"); 直接下载 somefile.rar    
     
         //和 Servlet 中不一样,这里我们不需对输出的中文转码为 ISO8859-1    
         return new ByteArrayInputStream("Struts2 文件下载测试".getBytes());    
     }    
     
     //对于配置中的 ${fileName}, 获得下载保存时的文件名    
     public String getFileName() {    
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");    
         String fileName = "序列号(" + df.format(new Date()) + ").txt";    
         try {    
             //中文文件名也是需要转码为 ISO8859-1,否则乱码    
             return new String(fileName.getBytes(), "ISO8859-1");    
         } catch (UnsupportedEncodingException e) {    
            // return "impossible.txt";

  //如果名字包括中文,需要转码

      SimpleDateFormat formatter  = new SimpleDateFormat("yyyyMMdd");
String date = formatter.format(new Date());     /'/当前时间
String name = "导入结果"+date+".xls";
String ret = ItamUtil.getCurrentTimestamp().toString()+".xls";  
try{
String clientCharset = ServerConfig.get(ServerConfig.CONFIG_CLIENT_CHARSET, "GBK");
ret = new String(name.getBytes(clientCharset), "ISO-8859-1");

}catch(Exception e){
}
return ret;
         }    
     }    
 }    



前端调用用链接法href或者window.location.href ,接受一个完整的地址或者接口,不能用ajax请求,ajax不能下载东西

当不想改变当前页面的任何状态时,可用ajax调用该接口


删除文件

获取文件url,调用其delet()方法就行

File filePath = new File(url);

if(! filePath.exists()){
return;
}else{
filePath.delete();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值