Java MultipartFile实现文件上传(一)

您所在的位置:网站首页 java文件上传怎么实现 Java MultipartFile实现文件上传(一)

Java MultipartFile实现文件上传(一)

2024-07-13 14:37:30| 来源: 网络整理| 查看: 265

使用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; } }

这里是我上传在本地的地址 在这里插入图片描述

第一篇文件上传就到这里,下一篇为上传的图片增加水印信息 传送门: 上传图片并且增加水印



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭