引言
之前使用springMVC进行文件上传只是上传到本地,这样很不适合项目发布,所以尝试一下如何把上传文件上传到服务器上。
1. 新建maven项目
2. 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>8.5.34</version>
</dependency>
<!-- 跨服务器上传 -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
- 配置文件
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# all files max
spring.servlet.multipart.max-request-size=10MB
# one file max
spring.servlet.multipart.max-file-size=10MB
#file normal path
file.staticAccessPath=/image/**
#file real path
file.uploadFolder=http://你自己买的服务器的ip/imgs/
这里的页面采用的是jsp
- 编写配置类
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Value("${file.staticAccessPath}")
private String staticAccessPath;
@Value("${file.uploadFolder}")
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//staticAccessPath 表示上传的文件地址,uploadFolder表示真实的上传地址
registry.addResourceHandler(staticAccessPath).addResourceLocations(uploadFolder);
}
}
- 写controller 实现功能
@Controller
public class FileUploadController {
@Value("${file.uploadFolder}")
private String uploadFolder;
@GetMapping("/fileupload")
public String fileupload() {
return "fileupload";
}
/**
* 上传到本地
*
* @param file
* @return
*/
@PostMapping("/fileUpload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "上传失败,请选择文件";
}
String fileName = file.getOriginalFilename();
String filePath = "D:/test/";
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
return "上传成功";
} catch (IOException e) {
e.printStackTrace();
}
return "上传失败!";
}
/**
* 跨服务器文件上传
*
*/
@ResponseBody
@PostMapping("/fileupload3")
public String fileuoload3(@RequestParam("file") MultipartFile file) {
System.out.println("跨服务器文件上传...");
// 定义上传文件服务器路径
String path = uploadFolder;
// 获取上传文件的名称
String filename = file.getOriginalFilename();
// 创建客户端的对象
Client client = Client.create();
InputStream inputStream = null;
try {
inputStream = file.getInputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
// 将文件传入文件服务器
WebResource resource = client.resource(path + filename);
resource.put(String.class, inputStream);
return "success";
}
/**
* 实现文件下载
* @param request
* @param fileName
* @return
* @throws IOException
*/
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity<byte[]> download(HttpServletRequest request, HttpServletResponse response, @RequestParam("fileName") String fileName) throws IOException {
BufferedInputStream in = null;
ByteArrayOutputStream out = null;
URLConnection conn = null;
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);;
headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
try {
URL url = new URL(uploadFolder+fileName);
conn = url.openConnection();
in = new BufferedInputStream(conn.getInputStream());
out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
byte[] content = out.toByteArray();
return new ResponseEntity<>(content, headers, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
out.close();
}
return null;
}
}
- 测试
运行项目,测试上传,然后登录自己的服务器就会发现已经上传成功!