zoukankan      html  css  js  c++  java
  • 文件下载

    不要再说用<a>标签下载了,这个会把文件打开而不是下载

    例如:

     <a href="E:MyDesktop37fecd65330184de67d419a8d02e7081.jpg">下载</a>

    如果我这样写,浏览器就会把图片直接打开,除非是一个浏览器打不开的文件

    所以我们还是要用到java本身的文件读写来进行文件的下载

    <a href="downloadFile?filename=<s:property value='document_filename'/>">下载</a>
    package com.cpsec.tang.chemical.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.List;
    import java.util.Random;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    import org.springframework.stereotype.Controller;
    import com.cpsec.tang.chemical.biz.DocumentBiz;
    import com.cpsec.tang.chemical.entity.Document;
    import com.cpsec.tang.chemical.util.Pager;
    import com.opensymphony.xwork2.ActionSupport;
    
    @Controller("documentAction")
    public class DocumentAction extends ActionSupport{private String filename;
        public String downloadFile(){
            System.out.println(filename);
            try {
                HttpServletResponse response=ServletActionContext.getResponse();
                //设置文件MIME类型  
                response.setContentType(ServletActionContext.getServletContext().getMimeType(filename));  
                //设置Content-Disposition  
                response.setHeader("Content-Disposition", "attachment;filename="+filename);  
                //获取目标文件的绝对路径  
                String fullFileName = ServletActionContext.getServletContext().getRealPath("/files/" + filename);  
                //System.out.println(fullFileName);  
                //读取文件  
                InputStream in = new FileInputStream(fullFileName); 
                //读取目标文件,通过response将目标文件写到客户端
                OutputStream out = response.getOutputStream();  
                //写文件  
                int b;  
                while((b=in.read())!= -1)  
                {  
                    out.write(b);  
                }  
                in.close();  
                out.close();  
            } catch (Exception e) {
                e.printStackTrace();
            }
            return SUCCESS;
        }
       
    }

    文件上传:http://www.cnblogs.com/bunuo/p/upLoadFile.html

    上面的方法可以运行,但是后台会报错

     

    纠正一个正确的方法

    <a href="downloadDocu?filename=<s:property value='document_filename'/>">下载</a>
    public String downloadDocu(){
    	System.out.println(filename);
    	inputStream=ServletActionContext.getServletContext().getResourceAsStream("/files/"+filename);
    	System.out.println(inputStream);
    	return SUCCESS;
    }
    

      

    <action name="downloadDocu" class="documentAction" method="downloadDocu">  
      <result name="success" type="stream">  
      <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
        <!-- inputName 流对象名 —— 比如这里写inputStream,它就会自动去找Action中的getInputStream方法。 -->
        <param name="inputName">inputStream</param>
        <!-- contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${fileName}",将调用该Action中的getFileName方法。 -->
        <param name="contentDisposition">attachment;filename=${filename}</param>
        <!-- bufferSize 下载文件的缓冲大小 -->
        <param name="bufferSize">4096</param>
        </result>  
    </action>
  • 相关阅读:
    python3 基础数据类型之列表及其操作方法
    python3 逻辑运算符
    python3 内置函数
    python3 装饰器
    python3 变量作用域
    python3 参数以及函数的传参
    python3 函数基础
    洛谷P3379倍增LCA
    洛谷P3375KMP字符串匹配
    洛谷P2613有理数取余
  • 原文地址:https://www.cnblogs.com/bunuo/p/download.html
Copyright © 2011-2022 走看看