文章目录
-
spring boot实现文件上传
-
- 1.文件上传
-
2.文件下载
1.代码如下:
package com.example.demo;
import org.omg.PortableInterceptor.ServerRequestInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.lang.ref.ReferenceQueue;
import java.util.UUID;
@Controller
public class uploadFileController {
/*
上传文件必须使用post方法,get方法不可以
*/
@PostMapping(“/upload”)
public void uploadFile(MultipartFile uploadFile, HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println(“uploadFile=null?”+uploadFile.isEmpty()+“–”);
String realPath=request.getServletContext().getRealPath(“/uploadFile”);
File file=new File(realPath);
if (!file.isDirectory()){
file.mkdir();
}
/*
file.getOriginalFilename()是得到上传时的文件名。
UUID.randomUUID(): 全局唯一的IEEE机器识别号
*/
String oldFileName=uploadFile.getOriginalFilename();
String newFileName= UUID.randomUUID().toString()+oldFileName.substring(oldFileName.lastIndexOf(“.”),oldFileName.length());
/*
在文件上传的时候,MultipartFile中的transferTo(dest)方法只能使用一次;
并且使用transferTo方法之后不可以在使用getInputStream()方法;
*/
uploadFile.transferTo(new File(file,newFileName));
/*
文件上传到的真实地址 request.getScheme() 返回当前链接使用的协议
request.getServerName():返回服务器的名称 一般本地测试,就是返回localhost
*/
String path=request.getScheme()+“😕/”+request.getServerName()+“:”+request.getServerPort()+“/uploadFile/”+newFileName;
System.out.println(“文件被上传到了服务器路径为----”+path);
System.out.println(“电脑上的路径=”+file.getAbsolutePath()+“/”+newFileName);
}
@GetMapping(“/index”)
public String enterIndex(){
return “/index”;
}
}
@PostMapping(“/download”)
public void download(String fileName,HttpServletRequest request,HttpServletResponse response) throws IOException {
System.out.println(“要上传的文件名=”+fileName);
/要下载的文件路径位置/
String downloadFilePath=request.getRealPath(“/”)+“uploadFile\”+fileName;
File file=new File(downloadFilePath);
if (file.exists()){
System.out.println(“文件-”+downloadFilePath+“存在”);
// 设置强制下载不打开
response.setContentType(“application/force-download”);
}
/*
attachment:附件
Content-Disposition:内容配置
- */
response.addHeader(“Content-Disposition”,“attachment;fileName=”+fileName);
byte[] buffer=new byte[1024];
FileInputStream fileIn=new FileInputStream(file);
BufferedInputStream bufferedInputStream=new BufferedInputStream(fileIn);
/获取输出流/
OutputStream outputStream=response.getOutputStream();
/*
将文件数据读取到buffer中,并返回读取的字节数
----------特别注意:----------这里的read(buffer)虽然是连续,但不是一次性全部读取完到,所以这里要用
ream=new BufferedInputStream(fileIn);
/获取输出流/
OutputStream outputStream=response.getOutputStream();
/*
将文件数据读取到buffer中,并返回读取的字节数
----------特别注意:----------这里的read(buffer)虽然是连续,但不是一次性全部读取完到,所以这里要用