( ⊙ o ⊙ )!哟
今天做了一个将图片上传到又拍云,然后将又拍云的返回字段添加到数据库的接口方法
O(∩_∩)O然后我这边呢,是准备上传用户头像用的
当然,你首先必须要有一个服务器
首先稍稍的把我写的东西交代一下
1.我用的是SpringMVC然后写的controller
2.我controller层返回的是ResultData封装类>>>>然而这些都和今天上传无关紧要,小伙伴们就算用的其他的框架,都是不影响操作的
3.打*号的地方才是大家需要了解的代码,其他统统都不要管
controller层的操作
/**
* 传图
*
* @param sessionId
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/face", method = RequestMethod.POST)
@ResponseBody
public ResultData<String> changeFace(@CookieValue(value = "sid", defaultValue = "") String sid,
HttpServletRequest request, HttpServletResponse response) {
ResultData<String> resultData = new ResultData<String>();
try {
//*好了,开始了这一步小伙伴们应该都不陌生 就是multipart啦,页面上传文件的话是需要指定这个关键字的
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//*获得第1张图片(根据前台的name名称得到上传的文件)
MultipartFile imageFile = multipartRequest.getFile("file");
//*非空验证,这一步就不需要我过多解释了吧
if (null == imageFile) {
//这里给我的resultData设置一些错误信息,这里不需要管,不用copy
resultData.setStatus(CommonConstants.ILLEGAL_REQUEST);
resultData.setData("图片未选中");
resultData.setMsg("图片未选中");
return resultData;
} else {
//这里是判断有没有登陆,也不用管
String username = SystemManager.getInstance().getUserCookieMap().get(sid);
if (null == username || username.isEmpty()) {
resultData.setStatus(1000);
resultData.setMsg("您还没有登录");
return resultData;
}
//*****************************PS**************************************
//**PS ---[1.2.3的步骤,是设置服务器图片存放位置的路径,不是本地哦)]**
//*****************************PS**************************************
//这里才是正文
//***1.根据 UUID.randomUUID() 获取文件名(不懂UUID的同学可以看下我的博客,或者自行百度哦)
String fileName = UUID.randomUUID().toString();
//***2.设置相对路径
String path = "/" + username + "/face/";
//***3.设置保存路径
String savePath = path + fileName;
//ps下面是实例化图片类,同学们了解就行,我上传到数据库要用到
//这个是我的图片实体类
ImagesDomain record = new ImagesDomain();
//应为我是要上传用户头像,说以用到了username
record.setUsername(username);
//设置描述>>为face>>顾名思义,就是头像啦
record.setDes("face");
//*在controller层处理完后,进入到uploadFileService(看英文意思就知道这是上传用的)
//*方法返回的是:一个能在浏览器访问的url,这个url就是上传到服务器的图片
//*这个service在这个类下面(往下翻)
String imageUrl = uploadFileService.upload2ypyun(multipartRequest, savePath, record);
//*imageUrl的非空验证(判断有没有上传成功)
if (null == imageUrl || imageUrl.equals("")) {
resultData.setStatus(CommonConstants.ILLEGAL_REQUEST);
resultData.setData("上传失败");
resultData.setMsg("上传失败");
return resultData;
}
//实例化用户类,然后修改/新增头,这步大家不需要关心
MembersDomain domain = new MembersDomain();
domain.setUsername(username);
domain.setFaceUrl(imageUrl);
//调用底层方法,修改头像
resultData = userService.changeFace(domain);
}
} catch (Exception e) {
//抛个异常
// TODO: handle exception
resultData.setStatus(1);
resultData.setData(null);
resultData.setMsg(CommonConstants.tweetMessage);
}
return resultData;
}
service层的操作
/**
* 保存上传图片
*
* @param request
* @param savePath:/目录名/文件名
* @return 返回图片url
* @throws IOException
*/
@Override
public String uploadypyun(HttpServletRequest request, String savePath) {
//*获取传过来的MultipartHttpServletRequest
final MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//*然后创建一个map集合来存MultipartFile类型
final Map<String, MultipartFile> files = multiRequest.getFileMap();
//循环读
for (Object item : files.values()) {
//创建MultipartFile 接收
MultipartFile file = (MultipartFile) item;
//*HelperUtil是又拍云(服务器)提供,你买了或是租了应该有
String path = "./" + HelperUtil.getUUID();
try {
//保存上传图片
file.transferTo(new File(path));
//*上传操作,返回url
String r = ImageUtil.uploadImage(path, savePath);
return r;
} catch (IOException e) {
//抛异常
throw new ServiceException();
} finally {
try {
new File(path).delete();
} catch (Exception e) {
}
}
}
return null;
}