支持文件上传
支持本地文件下载
支持网络文件下载
Controller
package com.yujie.controller;
import com.yujie.service.UploadOrDownloadFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class UploadOrDownloadFileController {
@Autowired
private UploadOrDownloadFileService fileService;
@RequestMapping("/upload")
public String uploadFile(MultipartFile[] upload, HttpServletRequest request, HttpServletResponse response) throws IOException {
fileService.uploadFile(upload,request,response);
return "success";
}
@RequestMapping("/downloadWebFile")
public String downloadWebFile(HttpServletRequest request, HttpServletResponse response){
String url="https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso?spm=a2c6h.25603864.0.0.36142d1c0EDuvc";
fileService.downloadWebFile(url,request,response);
return "ok";
}
@RequestMapping("/downloadLocalFile")
public String downloadLocal(HttpServletRequest request, HttpServletResponse response){
fileService.downloadLocal("D:\\testsql.sql",request,response);
return "ok";
}
}
Service接口
public interface UploadOrDownloadFileService {
public String downloadLocal (String fileName, HttpServletRequest request, HttpServletResponse response);
public String downloadWebFile(String url, HttpServletRequest request, HttpServletResponse response);
public String uploadFile(MultipartFile[] upload, HttpServletRequest request, HttpServletResponse response);
}
实现类
Service
public class UploadOrDownloadFileServiceImpl implements UploadOrDownloadFileService {
@Override
public String downloadLocal(String filePath, HttpServletRequest request, HttpServletResponse response) {
try {
FileUtil.downloadLocal(filePath,request,response);
} catch (ClientAbortException e) {
System.out.println("客户端已取消下载");
}catch (Exception e){
e.printStackTrace();
}
return "ok";
}
/**
* 下载的外网文件
* @param urlPath
* @param request
* @param response
* @return
*/
@Override
public String downloadWebFile(String urlPath, HttpServletRequest request, HttpServletResponse response) {
try {
FileUtil.downloadWeb(urlPath,request,response);
} catch (ClientAbortException e) {
System.out.println("客户端已取消下载");
}catch (Exception e){
e.printStackTrace();
}
return "ok";
}
@Override
public String uploadFile(MultipartFile[] upload, HttpServletRequest request, HttpServletResponse response) {
String path = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(path);
if(!file.exists()){
file.mkdirs();
}
String filename = UUID.randomUUID().toString().replaceAll("-","");
try {
upload[0].transferTo(new File(path,filename+upload[0].getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
return "ok";
}
}工具类
package com.yujie.utils;
import org.apache.catalina.connector.ClientAbortException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class FileUtil {
public static void downloadLocal(String filePath,HttpServletRequest request, HttpServletResponse response) throws Exception{
File file = new File(filePath);
if(!file.exists()){
throw new FileNotFoundException("不存在文件:"+filePath);
}
FileInputStream fileInputStream = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
try {
//设置响应类型
String mimeType=request.getServletContext().getMimeType(filePath);
response.setHeader("Content-Type",mimeType);
String filename = URLEncoder.encode(file.getName(), "utf-8");
response.setHeader("Content-disposition","attachment;filename="+filename);
response.setHeader("Content-Length" , String.valueOf(file.length()));
byte[] buffer = new byte[1024];
int bytesRead=0;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
} catch (ClientAbortException e){
throw e;
}catch (Exception e){
throw e;
}finally {
fileInputStream.close();
}
}
/**
* 下载web文件
* @param urlPath 外网文件地址
* @param request
* @param response
* @throws IOException
*/
public static void downloadWeb (String urlPath,HttpServletRequest request, HttpServletResponse response) throws Exception {
URLConnection urlConnection = new URL(urlPath).openConnection();
InputStream inputStream = urlConnection.getInputStream();
ServletOutputStream out = response.getOutputStream();
//获取url文件名
String name = urlPath.substring(urlPath.lastIndexOf("/")+1);
//设置响应类型
String mimeType=request.getServletContext().getMimeType(urlPath);
response.setHeader("Content-Type",mimeType);
String filename = URLEncoder.encode(name, "utf-8");
response.setHeader("Content-disposition","attachment;filename="+filename);
String fileSize = urlConnection.getHeaderField("Content-Length");
if(fileSize!=null && fileSize.length()!=0 && !fileSize.equals("0")){
response.setHeader("Content-Length" , fileSize);
}
byte[] buffer = new byte[1024];
int bytesRead=0;
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}catch (ClientAbortException e){
throw e;
}catch (Exception e){
throw e;
}finally {
inputStream.close();
}
}
}
使用注意事项:InputStream读取网络文件采用的是TCP分多次获取报文数据
版权声明:本文为qq_42058998原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。