1图片上传
1.1 需求分析
kindeditor中文件上传所需要数据
1.2.包装类
package com.cdsxt.ego.beans;
import java.io.Serializable;
public class PictureResult implements Serializable {
//设置图片是否上传成功的状态0成功,1失败
private Integer error;
//上传图片之后,图片所在服务器上的url;
private String url;
//响应大客户端的提示信息
private String message;
public Integer getError() {
return error;
}
public void setError(Integer error) {
this.error = error;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public static PictureResult ok(String url) {
PictureResult pr = new PictureResult();
pr.setError(0);
pr.setMessage("ok");
pr.setUrl(url);
return pr;
}
public static PictureResult error() {
PictureResult pr = new PictureResult();
pr.setError(1);
pr.setMessage("error");
return pr;
}
}
1.3.工具类
1.3.1文件上传工具
package com.cdsxt.ego.utils;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FtpUtil {
public static boolean uploadFile(String hostname, int port, String username,
String password,String pathname, String remote, InputStream local) {
boolean flag = false;
try {
//1创建FTPClient对象
FTPClient client = new FTPClient();
//2建立和ftp服务器的连接
client.connect(hostname, port);
//3登录ftp服务器
client.login(username, password);
//4设置上传的文件类型
client.setFileType(FTP.BINARY_FILE_TYPE);
//5防止目录不存在,创建目录
client.makeDirectory(pathname);
//6切换工作目录,文件上传需要保存到那个目录
client.changeWorkingDirectory(pathname);
//7实现文件上传
flag = client.storeFile(remote,local);
if(flag) {
System.out.println("上传成功!");
}else {
System.out.println("上传失败!");
}
//关闭流
local.close();
//退出登录
client.logout();
//断开连接
client.disconnect();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
}
1.3.2文件名与商品ID生成工具
package com.cdsxt.ego.utils;
import java.util.Random;
public class IDUtils {
/**
* 图片名生成
*/
public static String getImageName() {
//去当前时间的长整行
long millis = System.currentTimeMillis();
//加上三位随机数
Random random = new Random();
int end3 = random.nextInt(1000);
String str = millis+String.format("%03d", end3);
return str;
}
/*
* 商品id生成
*/
public static long getItemId() {
//取当前的长整型
long millis = System.currentTimeMillis();
//加上两位随机数
Random random = new Random();
int end2 = random.nextInt(99);
//如果前面不足两位补0
String str = millis +String.format("%02d", end2);
return new Long(str);
}
public static void main(String[] args) {
for(int i=0;i< 100;i++)
System.out.println(getItemId());
}
}
1.4.消费接口
/**
* 完成图片的上传
* @param file
* @return
*/
public PictureResult uploadItemPic(MultipartFile file);
1.5 消费端实现类
package com.cdsxt.ego.manager.service.impl;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.cdsxt.ego.beans.EgoResult;
import com.cdsxt.ego.beans.PageResult;
import com.cdsxt.ego.beans.PictureResult;
import com.cdsxt.ego.manager.service.ManagerItemService;
import com.cdsxt.ego.rpc.pojo.Item;
import com.cdsxt.ego.rpc.pojo.ItemDesc;
import com.cdsxt.ego.rpc.service.ItemService;
import com.cdsxt.ego.utils.FtpUtil;
import com.cdsxt.ego.utils.IDUtils;
@Service
public class ManagerItemServiceImpl implements ManagerItemService {
@Autowired
private ItemService itemServiceProxy;
@Value("${FTP_HOST}")
private String FTP_HOST;
@Value("${FTP_PORT}")
private Integer FTP_PORT;
@Value("${FTP_USERNAME}")
private String FTP_USERNAME;
@Value("${FTP_PASSWORD}")
private String FTP_PASSWORD;
@Value("${FTP_PATH}")
private String FTP_PATH;
@Value("${IMAGE_HTTP_PATH}")
private String IMAGE_HTTP_PATH;
/*图片上传
*
*/
@Override
public PictureResult uploadItemPic(MultipartFile file) {
// TODO Auto-generated method stub
boolean falg = false;
String fileName = null;
try {
//1获取信息的文件名字
fileName = IDUtils.getImageName();
//2获得上传文件的原始名字
String oriName = file.getOriginalFilename();
//3获取拓展名
String ext = oriName.substring(oriName.lastIndexOf("."));
//4生成新的文件名
fileName = fileName+ext;
//5获取流对象
InputStream local = file.getInputStream();
//6实现文件上传到ftp
falg = FtpUtil.uploadFile(FTP_HOST, FTP_PORT, FTP_USERNAME, FTP_PASSWORD, FTP_PATH, fileName, local);
}catch(Exception e) {
e.printStackTrace();
falg =false;
}
if(falg) {
return PictureResult.ok(IMAGE_HTTP_PATH+"/"+fileName);
}else {
return PictureResult.error();
}
}
}
1.6 控制器
package com.cdsxt.ego.manager.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
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 com.cdsxt.ego.beans.PictureResult;
import com.cdsxt.ego.manager.service.ManagerItemService;
@Controller
public class ItemPictureController {
@Autowired
private ManagerItemService managerItemService;
@RequestMapping(value="/pic/upload",produces=MediaType.APPLICATION_JSON_VALUE+";charset=UTF-8")
@ResponseBody
public PictureResult uploadItemPic(MultipartFile uploadFile) {
return managerItemService.uploadItemPic(uploadFile);
}
}
2新增/修改商品
2.1需求分析
同过前面图片上传用到的工具类得到商品的id
2.2服务端接口
/*
* 添加商品
*
*/
public Boolean insertItem(Item item, ItemDesc itemDesc);
/*
* 修改商品
*
*/
public Boolean updateItem(Item item, ItemDesc itemDesc);
2.3服务端实现类
/*添加商品
*/
@Override
public Boolean insertItem(Item item, ItemDesc itemDesc) {
// TODO Auto-generated method stub
int insert = itemMapper.insert(item);
int insert2 = itemDescMapper.insert(itemDesc);
if(insert!=0&&insert2!=0) {
return true;
}
return false;
}
/*修改商品
*/
@Override
public Boolean updateItem(Item item, ItemDesc itemDesc) {
// TODO Auto-generated method stub
int update = itemMapper.updateByPrimaryKeySelective(item);
int update2 = itemDescMapper.updateByPrimaryKeySelective(itemDesc);
if(update!=0&&update2!=0) {
return true;
}
return false;
}
2.4消费端接口
/*
* 新增
*/
public EgoResult itemSeave(Item item, String desc);
/*
* 修改
*/
public EgoResult itemUpdate(Item item, String desc);
2.5消费端实现类
/*新增
*/
@Override
public EgoResult itemSeave(Item item, String desc) {
// TODO Auto-generated method stub
Long id = IDUtils.getItemId();
Date date = new Date();
//设置item的值
item.setId(id);
item.setStatus((byte) 1);
item.setUpdated(date);
item.setCreated(date);
//设置desc的值
ItemDesc itemDesc = new ItemDesc();
itemDesc.setItemId(id);
itemDesc.setItemDesc(desc);
itemDesc.setCreated(date);
itemDesc.setUpdated(date);
Boolean flag = itemServiceProxy.insertItem(item, itemDesc);
if(flag) {
return EgoResult.ok();
}else {
return EgoResult.error("error");
}
}
/*修改
*/
@Override
public EgoResult itemUpdate(Item item, String desc) {
// TODO Auto-generated method stub
Date date = new Date();
//设置item
item.setUpdated(date);
//设置desc
ItemDesc itemDesc= new ItemDesc();
itemDesc.setItemId(item.getId());
itemDesc.setItemDesc(desc);
itemDesc.setUpdated(date);
Boolean flag= itemServiceProxy.updateItem(item, itemDesc);
if(flag) {
return EgoResult.ok();
}else {
return EgoResult.error("error");
}
}
2.6控制器
/*
* 添加商品
*/
@RequestMapping("/item/save")
@ResponseBody
public EgoResult itemSeave(Item item, String desc) {
return managerItemService.itemSeave(item, desc);
}
/*
*
* 修改商品
*/
@RequestMapping("/item/update")
@ResponseBody
public EgoResult itemUpdate(Item item, String desc) {
return managerItemService.itemUpdate(item, desc);
}