java spring 图片上传_SpringMVC完成商城系统的商品图片上传功能

本文详细介绍了如何使用SpringMVC在Java商城系统中实现商品图片上传功能,包括配置文件修改、图片名生成策略、接口定义、服务实现及控制器处理等关键步骤。通过这些步骤,实现了文件上传到FTP服务器并返回上传结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们完成了商品类目的选择功能,本篇文章我们要完成商品的图片上传功能,为了完成商品图片上传功能,我们首先搭建了图片服务器并且创建了图片站点。

1、javamall.manager.web项目pom.xml新增commons-fileupload

commons-fileupload

commons-fileupload

pom.xml的具体路径如下图所示

329d7a4307d793195bf7985951444670.png

2、SpringMVC配置文件springmvc.xml中新增文件上传解析器,具体代码如下

具体路径如下图所示

2797bd59d101d5a647c69e8b7b577c22.png

3、配置资源文件resource.properties的内容(没有resource.properties文件的,自己新建)FTP_ADDRESS=192.168.68.109

FTP_PORT=21

FTP_USERNAME=sql192_168_68_1

FTP_PASSWORD=PzyP45ynEjdBrBAZ

FTP_BASE_PATH=/www/wwwroot/192.168.68.109_8100

IMAGE_BASE_URL=http://192.168.68.109:8100/

ftp账号如何新建的,可以看下本站的这篇文章:新建java商城系统的图片站点的FTP账号

具体路径如下图所示

c59860be82f7485f25a0ac49696f007b.png

4、加载配置文件,来到 applicationContext-dao.xml 文件下,看下context:property-placeholder的配置,如果之前是db.properties改成*.properties,具体代码如下

路径截图如下

70446e00dee1cf26b7f70baa0cadc937.png

5、图片名的生成策略,我们采用“时间+随机数”的方式。

在javamall.common项目下新建名为IDUtil.java的工具类,具体代码如下package com.codingwhy.utils;

import java.util.Random;

public class IDUtil {

/**

* 图片名生成

*/

public static String genImageName() {

//取当前时间的长整形值包含毫秒

long millis = System.currentTimeMillis();

//long millis = System.nanoTime();

//加上三位随机数

Random random = new Random();

int end3 = random.nextInt(999);

//如果不足三位前面补0

String str = millis + String.format("%03d", end3);

return str;

}

}

具体路径如下图所示

2809f8c7ef02a00fc6073654a7a59c6e.png

6、项目javamall.manager.service下新增接口PictureService,具体代码如下package com.codingwhy.service;

import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

public interface PictureService {

Map uploadPicture(MultipartFile uploadFile);

}

具体路径如下图所示

260dd8420e6c055fd75a88d9d065189e.png

7、新建接口PictureService的实现类PictureServiceImpl,具体代码如下package com.codingwhy.service.impl;

import com.codingwhy.service.PictureService;

import com.codingwhy.utils.FtpUtil;

import com.codingwhy.utils.IDUtil;

import org.joda.time.DateTime;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Service;

import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;

import java.util.Map;

@Service

public class PictureServiceImpl  implements PictureService {

@Value("${FTP_ADDRESS}")

private String FTP_ADDRESS;

@Value("${FTP_PORT}")

private Integer FTP_PORT;

@Value("${FTP_USERNAME}")

private String FTP_USERNAME;

@Value("${FTP_PASSWORD}")

private String FTP_PASSWORD;

@Value("${FTP_BASE_PATH}")

private String FTP_BASE_PATH;

@Value("${IMAGE_BASE_URL}")

private String IMAGE_BASE_URL;

@Override

public Map uploadPicture(MultipartFile uploadFile) {

Map resultMap = new HashMap<>();

try {

//生成一个新的文件名

//取原始文件名

String oldName = uploadFile.getOriginalFilename();

//生成新文件名

//UUID.randomUUID();

String newName = IDUtil.genImageName();

newName = newName + oldName.substring(oldName.lastIndexOf("."));

//图片上传

String imagePath = new DateTime().toString("/yyyy/MM/dd");

boolean result = FtpUtil.uploadFile(FTP_ADDRESS, FTP_PORT, FTP_USERNAME, FTP_PASSWORD,

FTP_BASE_PATH, imagePath, newName, uploadFile.getInputStream());

//返回结果

if(!result) {

resultMap.put("error", 1);

resultMap.put("message", "文件上传失败");

return resultMap;

}

resultMap.put("error", 0);

resultMap.put("url", IMAGE_BASE_URL + imagePath + "/" + newName);

return resultMap;

} catch (Exception e) {

resultMap.put("error", 1);

resultMap.put("message", "文件上传发生异常");

return resultMap;

}

}

}

具体路径如下图所示

ac3a1645b9eb0af6f3173bc037662fcc.png

8、在javamall.manager.web项目下新建PictureController类,具体代码如下package com.codingwhy.controller;

import com.codingwhy.service.PictureService;

import com.codingwhy.utils.JsonUtil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

@Controller

public class PictureController {

@Autowired

private PictureService pictureService;

@RequestMapping("/pic/upload")

@ResponseBody

public String pictureUpload(MultipartFile uploadFile) {

Map result = pictureService.uploadPicture(uploadFile);

//为了保证功能的兼容性,需要把Result转换成json格式的字符串。

String json = JsonUtil.objectToJson(result);

return json;

}

}

具体路径如下图所示

4344bee4074e06870a9c9ef327b6fad9.png

9、此次项目偏重于后端,前端的代码我就不贴出来,大家看下js就行,还是比较简单的。

通过以上的步骤就完成了图片的上传功能,我们打开后台测试下

fa10a825dfb73744975c8837a24f36bb.png

单击上传后可以看到图片上传成功了

d69404c2574dcca5246228ccfee5d522.png

我们打开宝塔面板可以看到图片站点目录下也有上传的图片了

ed02219ee524da829f39d73843747181.png

另外本篇文章用到了2个工具类,ftp和json的,可以看下本站的以下2篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值