天天看点

gtp java 文件传输_5_1_图片上传

图片上传

一 需求

1 图片上传到本地;

2 图片上传到七牛云。

效果图:

gtp java 文件传输_5_1_图片上传

二 具体代码实现

1 ToutiaoUtil.java: 用来判断上传的文件名是否合格;

packagecom.nowcoder.util;importcom.alibaba.fastjson.JSONObject;importcom.nowcoder.controller.LoginController;importorg.omg.CORBA.PUBLIC_MEMBER;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.security.MessageDigest;importjava.util.Map;

public classToutiaoUtil {private static final Logger logger = LoggerFactory.getLogger(ToutiaoUtil.class);private static String[] IMAGE_FILE_EXT = {"png", "bmg", "jpg", "jpeg"};public static String IMAGE_DIR = "H:/toutiao/upload/";public static String IMAGE_DOMAIN = "http://192.168.0.100:8080/";public static booleanisAllowed(String fileExt) {if (fileExt == null) {return false;

}for(String ext : IMAGE_FILE_EXT) {if(ext.equals(fileExt)) {return true;

}

}return false;

}

}

2. NewsService.java : saveImage() 上传到本地:

public String saveImage(MultipartFile file) throwsIOException{

String fileOriName=file.getOriginalFilename();int dotPos = fileOriName.lastIndexOf(".");if(dotPos < 0){return null;

}

String fileExt= fileOriName.substring(dotPos + 1).toLowerCase();if(!ToutiaoUtil.isAllowed(fileExt)){return null;

}

String fileNewName= UUID.randomUUID().toString().replaceAll("-", "") + "." +fileExt;

Files.copy(file.getInputStream(),new File(ToutiaoUtil.IMAGE_DIR +fileNewName).toPath(),

StandardCopyOption.REPLACE_EXISTING);return ToutiaoUtil.IMAGE_DOMAIN + "image?name= " +fileNewName;

}

上传到七牛云:

packagecom.nowcoder.service;importcom.alibaba.fastjson.JSONObject;importcom.nowcoder.util.ToutiaoUtil;importcom.qiniu.common.QiniuException;importcom.qiniu.common.Zone;importcom.qiniu.http.Response;importcom.qiniu.storage.Configuration;importcom.qiniu.storage.UploadManager;importcom.qiniu.util.Auth;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Service;importorg.springframework.web.multipart.MultipartFile;importjava.io.IOException;importjava.util.UUID;@Servicepublic classQiniuService {private static final Logger logger = LoggerFactory.getLogger(QiniuService.class);//设置密钥私钥

private static final String ACCESS_KEY = "F1gWSjirYuPH6tlHmWMmTKj6Vf-o_Zv-neyhsnX7";private static final String SECRET_KEY = "5IGLFKGyGtp_ZM2yBLFTSMFHNxVJF4H2JG4fRckv";//外链默认域名

private static final String QINIU_DOMAIN_PREFIX= "http://oopscdse9.bkt.clouddn.com/";//设置上传空间

String bucketName = "nowcoder";//密钥配置

Auth auth =Auth.create(ACCESS_KEY, SECRET_KEY);

String upToken=auth.uploadToken(bucketName);//创建上传对象

Configuration cfg = newConfiguration(Zone.zone2());

UploadManager uploadManager= newUploadManager(cfg);public String saveImage(MultipartFile file) throwsIOException{try{int dotPos = file.getOriginalFilename().lastIndexOf(".");if(dotPos < 0){return null;

}

String fileExt= file.getOriginalFilename().substring(dotPos + 1).toLowerCase();if(!ToutiaoUtil.isAllowed(fileExt)){return null;

}

String fileName= UUID.randomUUID().toString().replaceAll("-", "") + "." +fileExt;//调用put方法上传

Response response =uploadManager.put(file.getBytes(), fileName, upToken);

System.out.print(response.bodyString());//{"hash":"FlzkXRBfIIpQh1JhBzIEMdfJzOr1","key":"20a0ed3733f84b8585da08b6277cd60a.jpg"}

System.out.print(response.toString());if(response.isOK() &&response.isJson()){

String key= JSONObject.parseObject(response.bodyString()).get("key").toString();return QINIU_DOMAIN_PREFIX +key;

}else{

logger.error("七牛异常" +response.bodyString());return null;

}

}catch(QiniuException ex){

Response r=ex.response;

logger.error("读取图片错误:" +ex.getMessage());

System.out.print(r.toString());return null;

}

}

}

3. Controller : NewsController.java

注:fileUrl可以随意切换,如上传到本地就得到一个本地的url;

上传到七牛云就用七牛云的service得到一个url;

上传到又拍云就用又拍云的service得到一个url.

@RequestMapping(value = {"/uploadImage"}, method ={RequestMethod.POST})

@ResponseBodypublic String uploadImage(@RequestParam("file") MultipartFile file){try{

String fileUrl=newsService.saveImage(file);//String fileUrl = qiniuService.saveImage(file);

if(fileUrl == null){return ToutiaoUtil.getJSONString(1, "图片上传失败");

}return ToutiaoUtil.getJSONString(0, fileUrl);

}catch(Exception e){

logger.error("上传图片失败" +e.getMessage());return ToutiaoUtil.getJSONString(1, "图片上传失败");

}

}

如果上传到七牛云,就改成:

String fileUrl = qiniuService.saveImage(file);

相关的code:

packagecom.nowcoder.util;importcom.alibaba.fastjson.JSONObject;importcom.nowcoder.controller.LoginController;importorg.omg.CORBA.PUBLIC_MEMBER;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.security.MessageDigest;importjava.util.Map;

public classToutiaoUtil {private static final Logger logger = LoggerFactory.getLogger(ToutiaoUtil.class);private static String[] IMAGE_FILE_EXT = {"png", "bmg", "jpg", "jpeg"};public static String IMAGE_DIR = "H:/toutiao/upload/";public static String IMAGE_DOMAIN = "http://192.168.0.100:8080/";public static booleanisAllowed(String fileExt){if(fileExt == null){return false;

}for(String ext : IMAGE_FILE_EXT){if(ext.equals(fileExt)){return true;

}

}return false;

}public static String getJSONString(intcode){

JSONObject jsonObject= newJSONObject();

jsonObject.put("code", code);returnjsonObject.toString();

}public static String getJSONString(intcode, String msg){

JSONObject jsonObject= newJSONObject();

jsonObject.put("code", code);

jsonObject.put("msg", msg);returnjsonObject.toString();

}public static String getJSONString(int code, Mapmap){

JSONObject jsonObject= newJSONObject();

jsonObject.put("code", code);for(Map.Entrym : map.entrySet()){

jsonObject.put(m.getKey(), m.getValue());

}returnjsonObject.toString();

}public staticString MD5(String key) {char hexDigits[] ={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};try{byte[] btInput =key.getBytes();//获得MD5摘要算法的 MessageDigest 对象

MessageDigest mdInst = MessageDigest.getInstance("MD5");//使用指定的字节更新摘要

mdInst.update(btInput);//获得密文

byte[] md =mdInst.digest();//把密文转换成十六进制的字符串形式

int j =md.length;char str[] = new char[j * 2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 =md[i];

str[k++] = hexDigits[byte0 >>> 4 & 0xf];

str[k++] = hexDigits[byte0 & 0xf];

}return newString(str);

}catch(Exception e) {

logger.error("生成MD5失败", e);return null;

}

}

}

七牛云的缩略图服务:https://developer.qiniu.com/dora/api/1279/basic-processing-images-imageview2