SSM实现上传图片以及批量插入到数据库
-我把图片上传这块分了6个文件来编写代码,至于为什么分6个模块,因为把相关的内容分开来写会显得条理清楚。修改某块的时候比较方便。总共分为UploadImages.java,Globals.java,Utils.java,FileUtils.java,PropertiesLoader.java以及一个配置文件
其实上传图片只有两个步骤:
-
提交图片到某个文件夹并返回图片路径
不多说上代码:
代码块
//提交图片返回路径
@RequestMapping(value = “/uploadImages”,method = RequestMethod.POST)
@ResponseBody
public Object uploadImages(HttpServletRequest request, @RequestParam(“file”) MultipartFile[] files)throws Exception{
//这里能直接得到文件数组
List filePathList = new ArrayList<>();
if (files==null){
throw new IOException(“上传失败:文件为空”);
}
for (MultipartFile file:files){
//服务器路径加项目名称
//这块实在Globals.java里面配置的或者你也可以直接写成
//String imageUrl =request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+request.getContextPath();
String imageUrl = Globals.getLocalPath(request);
// String imageUrl = Globals.getServerPath(request);
System.out.println(imageUrl);
//图片真实路径
Object fileRealPath = Utils.imageUpload(request,”chenjiahui/”,file);
//把服务器路径和图片路径拼接起来
Object filePath = imageUrl+fileRealPath;
filePathList.add(filePath);
System.out.println(filePathList);
}
return filePathList;
- Utils.java代码块
/**
* Created by 陈家辉 on 2018/2/20
* 上传图片
* @throws Exception
*/
public static String imageUpload(HttpServletRequest request, String directory, MultipartFile file) throws Exception {
// 文件保存路径
String realPath = Globals.USER_IMAGES + directory;
//创建目录
FileUtils.createDirectory(Globals.getUserImagesBaseDir()+realPath);
//获取文件名
// UUID.randomUUID()加上这个是为了防止上传相同图片
String fileName = UUID.randomUUID() +file.getOriginalFilename();
// 转存文件
file.transferTo(new File( Globals.getUserfilesBaseDir() +realPath + "/"+ fileName));
return realPath + fileName;
}
-**Glbals.java代码块**
/**
* 当前对象实例
*/
private static Globals globals = new Globals();
//1.我用的是idea,在Application Context中配置了/cjhtest,所以request.getServerPort()+request.getContextPath()之间没加+“/”+
public static String getLocalPath(HttpServletRequest request){
String imageLocal = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
return imageLocal;
}
//这个用于服务器,要把项目名跟在后面所以加了一个/
public static String getServerPath(HttpServletRequest request){
String imageServer = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+”/”+request.getContextPath();
return imageServer;
}
/**
* 获取当前对象实例
*/
public static Globals getInstance() {
return globals;
}
/**
* 保存全局属性值
*/
private static Map<String, String> map = Maps.newHashMap();
/**
* 属性文件加载对象,引入你勇于配置的属性文件
*/
private static PropertiesLoader loader = new PropertiesLoader("imagePath.properties");
/**
* 上传文件基础虚拟路径,定义的常亮,可以改成自己的
*/
public static final String USER_IMAGES = "/chenjiahui1/";
/**
* 获取配置
*
*/
public static String getConfig(String key) {
String value = map.get(key);
if (value == null){
value = loader.getProperty(key);
map.put(key, value != null ? value : StringUtils.EMPTY);
}
return value;
}
/**
* 获取上传文件的根目录
* @return
*/
public static String getUserImagesBaseDir() {
String dir = getConfig("userImagesBaseDir.basedir");
if (StringUtils.isBlank(dir)){
try {
dir = ServletContextFactory.getServletContext().getRealPath("/");
} catch (Exception e) {
return "";
}
}
if(!dir.endsWith("/")) {
dir += "/";
}
// System.out.println(“userImagesBaseDir.basedir: ” + dir);
return dir;
}
-FileUtils.java代码块
/**
* 创建目录
* @param descDirName 目录名,包含路径
* @return 如果创建成功,则返回true,否则返回false
*/
public static boolean createDirectory(String descDirName) {
String descDirNames = descDirName;
if (!descDirNames.endsWith(File.separator)) {
descDirNames = descDirNames + File.separator;
}
File descDir = new File(descDirNames);
if (descDir.exists()) {
log.debug(“目录 ” + descDirNames + ” 已存在!”);
return false;
}
// 创建目录
if (descDir.mkdirs()) {
log.debug(“目录 ” + descDirNames + ” 创建成功!”);
return true;
} else {
log.debug(“目录 ” + descDirNames + ” 创建失败!”);
return false;
}
-PropertiesLoader.java代码块
private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class);
private static ResourceLoader resourceLoader = new DefaultResourceLoader();
private final Properties properties;
public PropertiesLoader(String... resourcesPaths) {
properties = loadProperties(resourcesPaths);
}
public Properties getProperties() {
return properties;
//取出String类型的Property
public String getProperty(String key) {
String value = getValue(key);
if (value == null) {
throw new NoSuchElementException();
}
return value;
}
imagePath.properties文件
userfiles.basedir=E:/cjhtest//E盘下的cjhtest项目名称
前面的一系列操作就能把图片路径返回,接下来就是将图片路径批量保存到数据库中,直接上代码:
保存图片路径
建图片表,字段id,imgUrl
@RequestMapping(value = “/saveImages”, method = RequestMethod.POST)
@ResponseBody
public Object saveImages(BizImages bizImages)throws Exception{
if (bizImages==null){
return new Exceptin(“上传失败:图片为空”);
}
//我这上传的路径格式是”xxx.jpg,yyy.jpg” 是一个String类型,里面放了多个图片路径,所以我们转成集合进行操作
List<String> imgUrlLists = Arrays.asList(bizImages.getImgUrl().split(","));
//进行遍历
for (int i = 0;i<imgUrlLists.size();i++){
String imgUrlf = imgUrlLists.get(i).toString();
//由于多张图片的一个路径最前面和最后一个路径的最后边都读了一个",但是不知道改用什么办法,我自己的解决办法是用空格代替",然后去掉前后的空格
String imgUrls = imgUrlf.replace('"',' ').trim();
//调用保存方法:
bizImagesService.saveImages(imgUrls);
System.out.println(imgUrls);
}
return JsonUtil.successMessage("保存成功");
}
#SQL语句:
INSERT INTO biz_images(
id,
create_date,
imgUrl
)VALUES
(
UUID(),
now(),
#{imgUrls}
)
**
数据库显示