主要是通过【MultipartFile】作为参数类型来实现文件上传的。
1、相关controller代码如下:
@RequestMapping(value = "/upload", method = RequestMethod.POST) public String upload(@RequestParam("file")MultipartFile file) { if (Objects.isNull(file) || file.isEmpty()) { //判断非空 return "文件为空,请重新上传"; } try { byte[] bytes = file.getBytes(); //要存入本地的地址放到path里面 Path path = Paths.get( FileUtils.UPLOAD_FOLDER + "/"); //如果没有files文件夹,则创建 if (!Files.isWritable(path)) { Files.createDirectories(path); } String extension = FileUtils.getFileExtension(file); //获取文件后缀 FileUtils.getFileByBytes(bytes, FileUtils.UPLOAD_FOLDER, "上传文件" + extension); return "上传成功"; } catch (Exception e) { e.printStackTrace(); } return "上传失败"; }
2、FileUtils.java的文件代码如下:
public class FileUtils { //这是本地存入的格式,上传到服务器的话,格式类似于,"/root/images/pc/" public static String UPLOAD_FOLDER = "D:/images/pc/"; /** * 将文件转换成Byte数组 * * @param pathStr * @return */ public static byte[] getBytesByFile(String pathStr) { File file = new File(pathStr); try { FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(1024); byte[] b = new byte[1024]; int n; while ((n = fis.read(b)) != -1) { bos.write(b, 0, n); } fis.close(); byte[] data = bos.toByteArray(); bos.close(); return data; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 将Byte数组转换成文件 * * @param bytes * @param filePath * @param fileName */ public static void getFileByBytes(byte[] bytes, String filePath, String fileName) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file = null; try { File dir = new File(filePath); if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在 dir.mkdirs(); } file = new File(filePath + "\\" + fileName); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(bytes); } catch (Exception e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 获取文件后缀 * * @param File * @return */ public static String getFileExtension(MultipartFile File) { String originalFileName = File.getOriginalFilename(); return originalFileName.substring(originalFileName.lastIndexOf(".")); } }
3、特别注意:由于SpringBoot默认上传文件大小为1M,所以在配置文件application.properties添加如下代码:(我这边改的是30M)
#设置文件上传大小 spring.servlet.multipart.max-file-size=31457280 spring.servlet.multipart.max-request-size=31457280
代码自行优化。
Android文件上传请求可参考:https://blog.csdn.net/lpCrazyBoy/article/details/84344646