引入配置
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-crypto</artifactId> <version>5.2.0.RELEASE</version> </dependency>新建Controller
package com.skypegmwcn.zhxy.skypegmwcn.controller; import com.skypegmwcn.zhxy.skypegmwcn.entity.File; import com.skypegmwcn.zhxy.skypegmwcn.service.FileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.servlet.http.HttpServletRequest; import java.util.Iterator; @RestController @AllArgsConstructor @RequestMapping("/file" ) @Api(value = "file", tags = "上传文件") public class FileController{ private FileService fileService; /*** * 上传文件 * @param file * @param request * @return * @throws Exception */ @ApiOperation(value = "上传文件", notes = "上传文件") @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) @ResponseBody public File uploadFile(MultipartFile file, HttpServletRequest request) throws Exception { CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession() .getServletContext()); commonsMultipartResolver.setDefaultEncoding("utf-8"); File files = new File(); // 判断是否有文件上传 if (commonsMultipartResolver.isMultipart(request)) {//有文件上传 MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; Iterator iter = multiRequest.getFileNames(); while (iter.hasNext()) { MultipartFile imageFile = multiRequest.getFile(iter.next().toString());//(String) iter.next() //文件保存方法,其中参数imageFile为文件路径,file文件实体 files = fileService.addFile(request, imageFile, file); } } return files; } }新建service
package com.skypegmwcn.zhxy.skypegmwcn.service; import com.skypegmwcn.zhxy.skypegmwcn.entity.File; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; public interface FileService { File addFile(HttpServletRequest request, MultipartFile imageFile, MultipartFile file); }service实现
package com.skypegmwcn.zhxy.skypegmwcn.service.impl; import com.skypegmwcn.zhxy.skypegmwcn.entity.File; import com.skypegmwcn.zhxy.skypegmwcn.service.FileService; import com.skypegmwcn.zhxy.skypegmwcn.service.NewsService; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; import java.util.Random; @Service @AllArgsConstructor public class FileServicelmpl implements FileService { private ConfigurableApplicationContext applicationContext; @Transactional public File addFile(HttpServletRequest request, MultipartFile imageFile, MultipartFile file) { File files = new File(); try { SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd"); String filePath = applicationContext.getEnvironment().getProperty("file.uploadFolder")+date.format(new Date()); java.io.File file2 = new java.io.File(filePath); if (!file2.exists()) { file2.mkdirs(); } String name=imageFile.getOriginalFilename().substring(imageFile.getOriginalFilename().lastIndexOf(".")); Random rand = new Random(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 String time = df.format(new Date()); int randnum1 = rand.nextInt(900)+100; time=time.concat(String.valueOf(randnum1)); int randnum2 = rand.nextInt(90)+10; time=time.concat(String.valueOf(randnum2)); String newName = time+name; String path=filePath+ java.io.File.separator+newName; java.io.File file1= new java.io.File(path); if(file1.exists()){ file1.delete(); } imageFile.transferTo(file1); files.setFilepath(filePath+ '/'+newName);文件路径 } catch (Exception e) { e.printStackTrace(); } return files; } }在实现中上传的地址是在config配置的,方便以后更改,然后文件名字是用时间的方式生成的,一天一个文件夹
