Java MultipartFile实现文件上传(一) |
您所在的位置:网站首页 › java文件上传怎么实现 › Java MultipartFile实现文件上传(一) |
使用MultipartFile上传至本地或者文件服务器
直接上代码 一、前端上传至服务端(controller层) package com.cargps.common; import com.alibaba.fastjson.JSON; import com.app.base.basecontroller.BaseController; import com.app.model.common.FileUploadEntity; import com.app.service.common.FileUploadService; import com.app.util.Common; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 文件/图片上传公共接口 * * @Author Smily * @DateTime 2021年2月3日 */ @RequestMapping(value = "/fileUpload/") public class FileUploadController extends BaseController { public static Logger logger = LoggerFactory.getLogger(FileUploadController.class); @Autowired private FileUploadService fileUploadService; /** * 文件/图片上传 * @param files 文件集合 * @param type 1储存相对路径 2储存绝对路径 * @return * @Author Smily * @DateTime 2020年7月14日 */ @ResponseBody @RequestMapping(value = "uploadTest.html", method = RequestMethod.POST) public Object uploadTest(MultipartFile[] files, @RequestParam(defaultValue = "") String describe,//图片描述 @RequestParam(defaultValue = "1") String type) //1返回图片相对路径 2返回图片绝对路径 { if (files == null || (files.length == 1 && files[0].getSize() == 0)){ return putData("图片为空"); } Map map = fileUploadService.uploadTest(files,describe,type); return map; } } 二、service层 package com.app.service.common; import com.app.model.common.FileUploadEntity; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; public interface FileUploadService { /** * 文件上传 * * @Param [files 文件, type 类型, describe 描述] * @Author: Smily * @Date: 2021/2/3 14:00 */ Map uploadTest(MultipartFile[] files,String describe, String type); } 三、文件上传实现类将上传的文件分日期年月日进行储存,如果是图片就储存到图片目录,文件就储存到文件目录。 package com.app.service.common.impl; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import com.app.base.basecontroller.BaseController; import com.app.service.common.FileUploadService; import com.app.util.fileupload.ImageWatermarkUtil; /** * 文件/图片上传 * @Author Smily * @DateTime 2021年2月3日 */ @Service("fileUploadService") public class FileUploadServiceImpl extends BaseController implements FileUploadService { public static Logger logger = LoggerFactory.getLogger(FileUploadServiceImpl.class); @Value("${httpHead}") //写自己的地址,或者文件服务器地址 private String httpHead; @Override public Map uploadTest(MultipartFile[] files, String describe, String type) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); List urlList = new ArrayList(); for (int i = 0; i < files.length; i++) { MultipartFile file = files[i]; String saveDBPath = ""; if (file != null && file.getSize() > 0) { String fileName = file.getOriginalFilename(); //根据文件类型储存在不同的文件夹下 String extension = getSuffix(fileName);//文件格式 if ((".pjpeg").equals(extension)) {//图片扩展名=转换 extension = ".jpeg"; } if (StringUtils.isBlank(extension)){ logger.error("上传失败,未获取到文件名"); return putData(Boolean.FALSE, "上传失败,未获取到文件名!", null); } //文件存储目录 String datePath = new SimpleDateFormat("yyyy/MM/dd/").format(new Date());//根据日期创建不同目录 String folderPath = ""; if (isImage(extension)) { folderPath = "image/" + datePath; }else { folderPath = "file/" + datePath; } String path = "/home/file_storage/" + folderPath; //文件名 普通地址 命名方式:时间-数字-描述 String newFileName = sdf.format(new Date()) + "-" + (i + 1) + extension; File targetFile = new File(path, newFileName); if (!targetFile.exists()) targetFile.mkdirs(); try { file.transferTo(targetFile); //储存数据库文件名 if ("1".equals(type)){//相对路径 saveDBPath = "/fileserver/"+ folderPath + newFileName; }else if ("2".equals(type)){//绝对路径 saveDBPath = httpHead + "/fileserver/"+ folderPath + newFileName; } urlList.add(saveDBPath); } catch (Exception e) { logger.error("文件上传失败", e); } } } return putData(Boolean.TRUE, "上传成功!", urlList); } /** * 获取文件后缀 * @Author Smily * @DateTime 2020年7月15日 * @param filename * @return */ private String getSuffix(String filename) { if (StringUtils.isNotBlank(filename)){ String suffix = ""; int pos = filename.lastIndexOf('.'); if (pos > 0 && pos < filename.length() - 1) { suffix = filename.substring(pos); } return suffix.toLowerCase(); } return ""; } /** * 判断文件类型 * @param suffix * @Author Smily * @DateTime 2020年7月15日 * @return */ public static boolean isImage(String suffix) { suffix = suffix.toUpperCase(); if (".PNG".equals(suffix) || ".JPG".equals(suffix) || ".JEPG".equals(suffix) || ".JPEG".equals(suffix) || ".BMP".equals(suffix) || ".HEIC".equals(suffix)) { return true; } return false; } }这里是我上传在本地的地址 第一篇文件上传就到这里,下一篇为上传的图片增加水印信息 传送门: 上传图片并且增加水印 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |