package com.kdy.controller
import com.sun.deploy.net.HttpResponse
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpRequest
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity
import org.springframework.stereotype.Controller
import org.springframework.util.MultiValueMap
import org.springframework.web.bind.annotation.RequestHeader
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import javax.jws.WebService
import javax.servlet.ServletOutputStream
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import java.io.*
import java.net.URLEncoder
@Controller
public class DownloadController {
/*
* 基于servlet api 的文件下载
* */
@RequestMapping("download")
public void download(@RequestParam( value = "filename",required = false) String str, HttpServletRequest req, HttpServletResponse resp) throws IOException {
String realPath
System.out.println(str)
if(str.equals("china")){
realPath = req.getServletContext().getRealPath("/upload/a.pptx")
}else{
realPath = req.getServletContext().getRealPath("/upload/b.png")
}
File tmpfile = new File(realPath)
String fileName = tmpfile.getName()
resp.setHeader("content-disposition","attachment
InputStream in = new FileInputStream(realPath)
int len = 0
byte[] buffer = new byte[1024*1024]
long begintime = System.currentTimeMillis()
ServletOutputStream outputStream = resp.getOutputStream()
while ((len = in.read(buffer)) >0){
outputStream.write(buffer,0,len)
}
long endtime =System.currentTimeMillis()
System.out.println(endtime-begintime)
in.close()
}
/**
* 基于spring ResponseEntity的文件下载 不支持缓冲区
* ResponseEntity 可以定制响应内容 响应头 响应编码
* */
@RequestMapping("dl2")
public ResponseEntity<String> download02(){
String body="hello world"
//MultiValueMap
HttpHeaders httpHeaders = new HttpHeaders()
httpHeaders.set("Set-Cookie","name=buzhidao");
return new ResponseEntity<String>(body,httpHeaders, HttpStatus.BAD_GATEWAY);
}
@RequestMapping("download03")
public ResponseEntity<byte[]> download03(HttpServletRequest req,HttpServletResponse resp) throws IOException {
String realPath = req.getServletContext().getRealPath("/upload/a.pptx");
File tmpfile = new File(realPath);
String fileName = tmpfile.getName();
//resp.setHeader("content-disposition","attachment
HttpHeaders httpHeaders = new HttpHeaders()
httpHeaders.set("content-disposition","attachment
InputStream in = new FileInputStream(realPath)
// ServletOutputStream outputStream = resp.getOutputStream()
byte[] bytes = new byte[in.available()]
in.read(bytes,0,in.available())
return new ResponseEntity<byte[]>(bytes,httpHeaders,HttpStatus.OK)
}
}