SSM综合项目实战(TTSC) -- day04 图片上传、商品列表

一、FastDFS介绍

FastDFS介绍详见本博客:http://blog.csdn.net/wingzhezhe/article/details/73161464

二、实现文件服务器

1、安装fastDFS

安装详见本博客:http://blog.csdn.net/wingzhezhe/article/details/73162668

2、测试fastDFS服务是否启动

(1)、确认tracker是否启动成功

[root@itcast-01 ~]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart



(2)、确认storage是否启动成功

[root@itcast-01 ~]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart



(3)、查看Nginx线程,确认是否启动成功

[root@itcast-01 ~]# ps -ef | grep nginx



3、测试上传图片

(1)、上传一张图片




(2)、使用fastDFS的命令上传图片

[root@itcast-01 ~]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload timg.jpg 



(3)、在浏览器中输入上传成功后返回的地址,查看图片




三、图片服务器的使用

1、使用说明

        我们一般使用java客户端进行上传图片,而使用图片服务器的客户端需要相关的依赖,但是中央仓库没有FastDFS的客户端依赖。

        在企业中有Maven私服,我们可以把FastDFS的java客户端依赖手动添加到Maven私服的第三方库,直接加入坐标使用。

        我们这里没有Maven私服,需要手动添加依赖,安装到本地仓库

2、添加依赖

(1)、在Eclipse中导入工程



注意:该工程在本博客资料中有

(2)、执行maven install命令

3、图片上传测试

(1)、创建jar包的maven工程






(2)、添加刚刚maven install的fastdfs_client的依赖




(3)、编写tracker.conf配置文件






(4)、编写java代码测试类

package cn.itcast.fastdfs.test;

import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

public class FastDFSTest {

	public static void main(String[] args) throws Exception {
		// 1. 初始化客户端,加载Tracker服务器的信息
		// 创建配置文件tracker.conf 内容是 tracker_server=192.168.37.161:22122
		System.out.println(System.getProperty("user.dir"));//该方法获取当前项目的绝对路径
		// ClientGlobal.init("D:/JavaSoft/Eclipse/workspace-heima64-taotao/fastdfs_test/src/main/resources/tracker.conf");
		ClientGlobal.init(System.getProperty("user.dir") + "//src//main/resources/tracker.conf");

		// 2. 创建TrackerClient,直接new
		TrackerClient trackerClient = new TrackerClient();

		// 3. 使用TrackerClient获取TrackerServer
		TrackerServer trackerServer = trackerClient.getConnection();

		// 4. 声明StorageServer,直接声明null即可
		StorageServer storageServer = null;

		// 5. 创建StorageClient,需要两个参数,一个参数是TrackerServer,另一个是StorageServer,
		// 他是用来上传图片的。
		StorageClient storageClient = new StorageClient(trackerServer, storageServer);

		// 6. 使用StorageClient进行图片上传,返回数组
		// 第一个参数是文件路径,第二个参数是文件后缀,第三个参数给一个null
		String[] str = storageClient.upload_file("C:/Users/Administrator/Desktop/timg.jpg", "jpg", null);

		// 7. 解析结果集,数组,打印
		for (String s : str) {
			System.out.println(s);
		}
	}

}

(5)、运行测试,控制台输出内容



(6)、浏览器访问图片




四、图片上传

1、前端item-add.jsp中上传图片代码分析




2、上传图片实现分析

(1)、在springmvc.xml中加入上传图片的配置

	<!-- 配置图片上传解析器 -->
	<!-- 注意:必须要添加id,且id的名字是接口的名字首字母小写 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 配置上传文件的大小 5M -->
		<property name="maxUploadSize" value="500000000" />
	</bean>



(2)、进行图片校验

校验图片大小:springmvc.xml配置文件中配置

校验图片格式:将在PicUploadController中编写

校验图片内容:将在PicUploadController中编写

(3)、创建PicUploadResult的pojo

原因:

        返回的数据需要有4个属性,需要json格式的数据

                error:0上传成功,1代表上传失败

                width:图片的宽

                height:图片的高

                url:图片的上传地址

在common工程中创建PicUploadResult.java




package com.taotao.common.pojo;

public class PicUploadResult {

	private Integer error;// 0上传成功,1代表上传失败

	private String width;// 图片的宽
	private String height;// 图片的高
	private String url;// 图片的上传地址

	public Integer getError() {
		return error;
	}

	public void setError(Integer error) {
		this.error = error;
	}

	public String getWidth() {
		return width;
	}

	public void setWidth(String width) {
		this.width = width;
	}

	public String getHeight() {
		return height;
	}

	public void setHeight(String height) {
		this.height = height;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

}

在web项目中引入common工程




3、准备资源文件


env.properties

#声明图片服务器的访问地址
TAOTAO_IMAGE_URL=http://192.168.37.161

tracker.conf

#配置tracker的服务地址,端口号默认为22122
tracker_server=192.168.37.161:22122

4、在springmvc.xml中读取properties资源文件

	<!-- 读取properties资源文件 -->
	<context:property-placeholder location="classpath:resources/env.properties" />



5、在taotao-manager-web项目中引入fastdfs_client的坐标




6、编写PicUploadController.java逻辑代码



package com.taotao.manager.controller;

import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;

import org.apache.commons.lang3.StringUtils;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.taotao.common.pojo.PicUploadResult;

/**
 * 图片操作的web层
 * 
 * @author Administrator
 *
 */
@Controller
@RequestMapping("pic/upload")
public class PicUploadController {

	// 使用Jackson的工具类,有三个功能:1、对象转json 2、json转对象 3、直接解析json
	private static final ObjectMapper MAPPER = new ObjectMapper();

	@Value("${TAOTAO_IMAGE_URL}") // 使用value注解从properties配置文件中读取参数
	private String TAOTAO_IMAGE_URL;

	// 声明允许上传的图片后缀
	private String[] TYPE = { ".jpg", ".png", ".jpeg", ".gif", ".bmp" };

	/**
	 * 图片上传方法
	 * @param uploadFile
	 * @return
	 * @throws Exception
	 * 
	 * produces = MediaType.TEXT_HTML_VALUE:将返回值类型设置问text/html;解决火狐浏览器不能处理json对象的问题
	 */
	@RequestMapping(method = RequestMethod.POST, produces = MediaType.TEXT_HTML_VALUE)
	@ResponseBody
	public String upload(MultipartFile uploadFile) throws Exception {
		// 声明返回的对象
		PicUploadResult result = new PicUploadResult();
		// 设置默认为上传失败
		result.setError(1);

		// 声明标识符
		boolean flag = false;

		// 校验图片格式(校验文件后缀名)
		for (String type : TYPE) {
			// 判断文件是否是要求的后缀名
			if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
				// 如果是要求的后缀名,结果表示为true
				flag = true;
				// 跳出循环
				break;
			}
		}

		// 判断后缀名校验是否成功
		if (!flag) {
			// 校验失败,直接返回结果
			String json = MAPPER.writeValueAsString(result);
			return json;
		} else {
			// 如果校验成功,重置标识符
			flag = false;
		}

		// 校验图片内容
		try {
			BufferedImage image = ImageIO.read(uploadFile.getInputStream());
			if (image != null) {
				// 获取宽和高
				result.setHeight("" + image.getHeight());
				result.setWidth(String.valueOf(image.getWidth()));
				// 图片内容校验成功,修改标识符为true
				flag = true;
			}
		} catch (Exception e) {
			// 此处为正在做内容校验的异常,此处异常不做任何处理
		}

		// 校验成功,执行上传操作
		if (flag) {
			// 校验成功,进行上传操作
			// 使用FastDFS的java客户端代码进行图片上传
			// 1.初始化客户端,加载配置文件,获取tracker服务信息
			ClientGlobal.init(System.getProperty("user.dir") + "/src/main/resources/resources/tracker.conf");

			// 2.创建TrackerClient
			TrackerClient trackerClient = new TrackerClient();

			// 3.获取TrackerServer
			TrackerServer trackerServer = trackerClient.getConnection();

			// 4.声明StorageServe为null
			StorageServer storageServer = null;

			// 5.创建storageClient,用来上传图片
			StorageClient storageClient = new StorageClient(trackerServer, storageServer);

			// 6.使用storageClient上传图片,接收返回的字符串数组
			String suffix = StringUtils.substringAfterLast(uploadFile.getOriginalFilename(), ".");
			String[] str = storageClient.upload_file(uploadFile.getBytes(), suffix, null);

			// 7.根据返回的字符串数据拼接图片的url
			String url = this.TAOTAO_IMAGE_URL + "/" + str[0] + "/" + str[1];

			// 8.把拼接好的图片url放入返回对象中
			result.setUrl(url);

			// 9.设置返回对象为上传成功
			result.setError(0);
		}

		// 将结果返会页面
		String json = MAPPER.writeValueAsString(result);
		return json;
	}
}


7、测试运行效果






五、商品列表查询

1、在common中创建公用的返回结果pojo类



package com.taotao.common.pojo;

import java.io.Serializable;
import java.util.List;

public class TaoResult<T> implements Serializable {

	private Long total;
	private List<T> rows;

	public TaoResult() {
		super();
	}

	public TaoResult(Long total, List<T> rows) {
		super();
		this.total = total;
		this.rows = rows;
	}

	public Long getTotal() {
		return total;
	}

	public void setTotal(Long total) {
		this.total = total;
	}

	public List<T> getRows() {
		return rows;
	}

	public void setRows(List<T> rows) {
		this.rows = rows;
	}

}

2、编写ItemController.java中代码

	/**
	 * 分页查询商品信息
	 * @param page
	 * @param rows
	 * @return
	 */
	@RequestMapping(method = RequestMethod.GET)
	@ResponseBody
	public TaoResult<Item> queryItemByPage(@RequestParam(value = "page", defaultValue = "1") Integer page,
			@RequestParam(value = "row", defaultValue = "1") Integer rows) {
		TaoResult<Item> taoResult = this.itemService.queryItemByPage(page, rows);
		return taoResult;
	}


3、编写Servie层接口和实现类

	/**
	 * 分页查询商品列表
	 * 
	 * @param page
	 * @param rows
	 * @return
	 */
	public TaoResult<Item> queryItemByPage(Integer page, Integer rows);

	/**
	 * 展示商品列表
	 */
	public TaoResult<Item> queryItemByPage(Integer page, Integer rows) {
		// 设置分页参数
		PageHelper.startPage(page, rows);
		// 封装查询条件
		Item item = new Item();
		item.setStatus(1);
		// 执行查询操作
		List<Item> list = super.queryListByWhere(item);
		// 封装返回的对象
		PageInfo<Item> pageInfo = new PageInfo<>(list);
		TaoResult<Item> taoResult = new TaoResult<Item>(pageInfo.getTotal(), list);
		return taoResult;
	}

4、测试运行




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM上传商品图片文件可以分为以下几个步骤: 1. 在页面中添加文件上传的表单项,如下所示: ``` <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="submit" value="上传"/> </form> ``` 2. 在Controller中添加文件上传的处理方法,如下所示: ``` @RequestMapping("/upload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { try { // 获取文件名 String fileName = file.getOriginalFilename(); // 获取文件的扩展名 String extName = fileName.substring(fileName.lastIndexOf(".")); // 生成新的文件名 String newFileName = UUID.randomUUID().toString() + extName; // 设置文件存储路径 String filePath = "D:/images/"; // 创建文件目录 File dest = new File(filePath + newFileName); if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } // 存储文件 file.transferTo(dest); return "上传成功!"; } catch (IOException e) { e.printStackTrace(); return "上传失败!"; } } else { return "文件不能为空!"; } } ``` 3. 在配置文件中添加文件上传的配置,如下所示: ``` <!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760" /> <property name="defaultEncoding" value="UTF-8"></property> </bean> ``` 其中,maxUploadSize属性表示上传文件的最大大小,单位是字节。在上述代码中,我们将其设置为10MB,即10485760字节。defaultEncoding属性表示上传文件的编码方式,一般设置为UTF-8即可。 以上就是在SSM上传商品图片文件的步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值