java圖片上傳-檔案/圖片上傳到七牛
阿新 • • 發佈:2018-11-01
java圖片上傳-檔案(圖片)上傳到七牛
一、在配置檔案中引入依賴(注:七牛開發者url:https://developer.qiniu.com/kodo)
二、工具類(UploadUtil )<-- 引入依賴 --> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.6</version> <scope>compile</scope> </dependency>
import java.io.IOException; import java.io.InputStream; import com.foriseland.fjf.base.BaseController; import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; /** * @describe 圖片上傳 * @author: LeoD * @createTime 2018年3月27日 下午12:23:33 */ public class UploadUtil extends BaseController { private static final Logger logger = LoggerFactory.getLogger(UploadUtil.class); private static final String ACCESS_KEY = "RGnPGwxZhQGoB-yEx4Yc-40位的key..."; private static final String SECRET_KEY = "_h6eA9vScnPzhiWAdEa1-40位的key..."; private static final String BUCKET = "test2"; public static final String IMG_SUFFIX_LIST = "jpg,jpeg,gif,png,ico,bmp,jpeg"; public static final String URL = "http://p22kr8qzx.bkt.clouddn.com/"; /** * 上傳圖片 * @param file * @return * @throws IOException */ public static String upload(@RequestParam MultipartFile file) { if (file == null) { logger.warn("上傳檔案為空!");return null; } InputStream inputStream = null; try { /** 獲取檔案的字尾* */ if (!checkFile(file.getOriginalFilename())) { logger.warn("上傳檔案型別不支援"); return null; } inputStream = file.getInputStream(); DefaultPutRet ret = qiNiuUpload(inputStream); if (null == ret) { logger.error("上傳檔案伺服器返回為null"); return null; } logger.info("上傳圖片名稱:" + file.getOriginalFilename()); logger.info("上傳後hash:" + ret.hash); logger.info("上傳後key:" + ret.key); return URL+"&#&"+ret.hash; } catch (QiniuException ex) { logger.error("上傳七牛伺服器異常", ex); } catch (Exception e) { logger.error("上傳異常", e); } finally { try { inputStream.close(); } catch (IOException e) { logger.error("上傳檔案,關閉輸入流異常", e); } } return null; } /** * 檢測圖片檔案型別 * @param fileName * @return */ public static boolean checkFile(String fileName) { boolean flag = false; String suffix = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); logger.info("上傳檔案字尾:" + suffix); if (IMG_SUFFIX_LIST.contains(suffix.trim().toLowerCase())) { flag = true; } return flag; } /** * 上傳七牛伺服器 * @param is * @return */ private static DefaultPutRet qiNiuUpload(InputStream is) throws Exception { Configuration cfg = new Configuration(Zone.zone0()); UploadManager uploadManager = new UploadManager(cfg); Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); String upToken = auth.uploadToken(BUCKET); com.qiniu.http.Response response = uploadManager.put(is, null, upToken, null, null); //解析上傳成功的結果 DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); logger.info(putRet.toString()); logger.info(putRet.key); logger.info(putRet.hash); return putRet; } }
三、入參的實體Dto
四、API層public class CrowdDto implements Serializable{ private static final long serialVersionUID = 1L; //序列化生成uid,在後面生成一個uid private String crowdId; //編號 private String userId; //使用者Id private String crowdName;//名稱 private String crowdLogo;//群頭像 private MultipartFile multipartFile; //檔案物件屬性 public MultipartFile getMultipartFile() { return multipartFile; } public void setMultipartFile(MultipartFile multipartFile) { this.multipartFile = multipartFile; } public String getCrowdName() { return crowdName; } public void setCrowdName(String crowdName) { this.crowdName = crowdName; } public String getCrowdLogo() { return crowdLogo; } public void setCrowdLogo(String crowdLogo) { this.crowdLogo = crowdLogo; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getCrowdId() { return crowdId; } public void setCrowdId(String crowdId) { this.crowdId = crowdId; } //生成Json字串(類似重寫ToString) @Override public String toString() { String js = JSONObject.toJSONString(this); return js; } //靜態生成uid public static long getSerialVersionUID() { return serialVersionUID; } }
public interface IWASCrowdInfoApi {
/**
* 上傳檔案(圖片)
* @param request* @return
*/
public String uploadFile(@RequestBody CrowdDto requestDto);
}
五、Provide層(實現API)
/**
*
* @className: BackendCrowdInfoProvide
* @describe:
* @author: LeoD
* @createTime
*/
@Service("backendCrowdInfoProvide")
public class BackendCrowdInfoProvide implements IWASCrowdInfoApi {
@Override
public String uploadFile(CrowdDto requestDto) {
return UploadUtil.upload(requestDto.getMultipartFile());
}
}
六
、Controller層(通過Swagger來進行測試的,詳情配置見回覆的連結)
@CrossOrigin(origins = "*", maxAge = 3600)
@[email protected](tags="資訊管理")
@RequestMapping("/crowdInfo")
public class CrowdInfoController {
private static final Logger logger = LoggerFactory.getLogger(CrowdInfoController.class);
@Autowired
private IWASCrowdInfoApi iWASCrowdInfoApi;
/*上傳檔案(圖片)*/
@ApiOperation(value = "上傳圖片", notes = "上傳圖片", httpMethod = "POST") @RequestMapping(value="uploadFile", method=RequestMethod.POST, produces="text/plain;charset=UTF-8;", consumes="application/json") @ResponseBody
public Response<String> uploadFile(@RequestBody CrowdDto requestDto){
String url = iWASCrowdInfoApi.uploadFile(requestDto);
Response<String> response = Response.create();
response.setData(url);return response;
}
}