zoukankan      html  css  js  c++  java
  • java 写个controller下载文件(word);两种方式

     java 读取某路径下的文件直接相应到前端页面!

    前端请求方式为get请求,只需要写个个按标签点击即可下载

     
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.harry.dandelion.framework.common.utils.StringUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.sinosoft.ssi.base.entity.ReportEntity;
    import com.sinosoft.ssi.base.mappers.ReportMapper;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @RestController
    public class ReportOutWord {
    	 
    	@Autowired
    	private ReportMapper RrportMapper;
    
    	@GetMapping("/exp/outWord/1")
    	public void download(HttpServletRequest request, HttpServletResponse response) {
    		String path= " ";
    		 
    
    			// 开始下载文件
    			try {
    				// path是指欲下载的文件的路径。
    				File file = new File(path);
    				// 取得文件名。
    				String filename = file.getName();
    				// 取得文件的后缀名。
    				String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
    				log.debug("下载文件类型为:" + ext);
    
    					 
    					// 以流的形式下载文件。
    					 
    					InputStream fis = new BufferedInputStream( new FileInputStream(path));
    					byte[] buffer = new byte[fis.available()];
    					fis.read(buffer);
    					fis.close();
    					// 清空response
    					response.reset();
    					// 设置response的Header //ISO-8859-1可以显示中文的文件名
    					response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO-8859-1"));
    					response.addHeader("Content-Length", "" + file.length());
    					OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
    					response.setContentType("application/octet-stream");
    					toClient.write(buffer);
    					toClient.flush();
    					toClient.close();
    					// 删除临时文件
    					//FileUtils.delFile(rootPath + File.separator + filename);
    					// TODO Auto-generated catch block
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			}
    
    	}
    }
    

      方式二:

    		// 开始下载文件
    			InputStream in = null;
    			try {
    				// 1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
    				response.setContentType("multipart/form-data");
    				// 2.设置文件头:最后一个参数是设置下载文件名
    				 
    				response.addHeader("Content-Disposition",
    						"attachment;filename=" + new String("*******.docx".getBytes(), "ISO-8859-1"));
    
    				in = new FileInputStream(new File(文件路径));
    
    				// 3.通过response获取ServletOutputStream对象(out)
    				int b = 0;
    				byte[] buffer = new byte[512];
    				while (b != -1) {
    					b = in.read(buffer);
    					if (b != -1) {
    						response.getOutputStream().write(buffer, 0, b);// 4.写到输出流(out)中
    					}
    
    				}
    			} catch (Exception e) {
    			} finally {
    				try {
    					if (in != null) {
    						in.close();
    					}
    					response.getOutputStream().flush();
    					
    					  
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    

      

  • 相关阅读:
    ProtoType Design Tools
    什么是publickeytoken及publickeytoken的作用
    Windows最高权限system帐户
    Q70 AV01本本安装MAC
    解决MDict3在PPC下乱码的问题
    QT_XSP.CPP
    QT_XSP.CPP
    SetupFactory脚本
    DVD IFO FILE HEADER
    SerialPort comstat is being used without defining
  • 原文地址:https://www.cnblogs.com/liglacier/p/14212342.html
Copyright © 2011-2022 走看看