存儲成功:數據庫
1、引入pomjson
<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>4.4</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
2、騰訊配置api
3、代碼數組
1、controller /** * 上傳文件 */ @PostMapping("/upload") @ResponseBody public R upload(@RequestParam("file") MultipartFile file) throws Exception { //上傳文件 String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); String url = CloudFactory.build().uploadSuffix(file.getBytes(), suffix); System.out.println("url=" + url); 、、 這裏須要將地址保存到數據庫 return R.ok().put("url", url); }
工廠類app
public class CloudFactory { public static CloudStorageService build(){ //獲取雲存儲配置信息 CloudStorageConfig config = new CloudStorageConfig(); config.setQcloudAppId(1256); config.setQcloudBucketName("ly"); config.setQcloudDomain("https://ly8.cossh.myqcloud.com"); config.setQcloudPrefix(""); config.setQcloudRegion("sh"); config.setQcloudSecretId("6RdXDerpa7PSFm3RpKZ"); config.setQcloudSecretKey("7zd191cx2rUXLtCFG3bu2va1DAs"); return new QcloudCloudStorageService(config); }
構建配置dom
抽象類ssh
/** * 雲存儲(支持七牛、阿里雲、騰訊雲、又拍雲) * @author lyon * @date 2018年3月27日 */ public abstract class CloudStorageService { /** 雲存儲配置信息 */ CloudStorageConfig config; /** * 文件路徑 * @param prefix 前綴 * @param suffix 後綴 * @return 返回上傳路徑 */ public String getPath(String prefix, String suffix) { //生成uuid String uuid = UUID.randomUUID().toString().replaceAll("-", ""); //文件路徑 String path = DateUtils.format(new Date(), "yyyyMMdd") + "/" + uuid; if(StringUtils.isNotBlank(prefix)){ path = prefix + "/" + path; } return path + suffix; } /** * 文件上傳 * @param data 文件字節數組 * @param path 文件路徑,包含文件名 * @return 返回http地址 */ public abstract String upload(byte[] data, String path); /** * 文件上傳 * @param data 文件字節數組 * @param suffix 後綴 * @return 返回http地址 */ public abstract String uploadSuffix(byte[] data, String suffix); /** * 文件上傳 * @param inputStream 字節流 * @param path 文件路徑,包含文件名 * @return 返回http地址 */ public abstract String upload(InputStream inputStream, String path); /** * 文件上傳 * @param inputStream 字節流 * @param suffix 後綴 * @return 返回http地址 */ public abstract String uploadSuffix(InputStream inputStream, String suffix); }
配置類beanide
public class CloudStorageConfig { //騰訊雲綁定的域名 private String qcloudDomain; //騰訊雲路徑前綴 private String qcloudPrefix; //騰訊雲AppId private Integer qcloudAppId; //騰訊雲SecretId private String qcloudSecretId; //騰訊雲SecretKey private String qcloudSecretKey; //騰訊雲BucketName private String qcloudBucketName; //騰訊雲COS所屬地區 private String qcloudRegion;
實際實現類ui
public class QcloudCloudStorageService extends CloudStorageService { private COSClient client; public QcloudCloudStorageService(CloudStorageConfig config){ this.config = config; //初始化 init(); } private void init(){ Credentials credentials = new Credentials(config.getQcloudAppId(), config.getQcloudSecretId(), config.getQcloudSecretKey()); //初始化客戶端配置 ClientConfig clientConfig = new ClientConfig(); //設置bucket所在的區域,華南:gz 華北:tj 華東:sh clientConfig.setRegion(config.getQcloudRegion()); client = new COSClient(clientConfig, credentials); } @Override public String upload(byte[] data, String path) { //騰訊雲必須要以"/"開頭 if(!path.startsWith("/")) { path = "/" + path; } //上傳到騰訊雲 UploadFileRequest request = new UploadFileRequest(config.getQcloudBucketName(), path, data); String response = client.uploadFile(request); JSONObject jsonObject = JSONObject.fromObject(response); if(jsonObject.getInt("code") != 0) { try { throw new Exception("文件上傳失敗," + jsonObject.getString("message")); } catch (Exception e) { e.printStackTrace(); } } return config.getQcloudDomain() + path; } @Override public String upload(InputStream inputStream, String path) { try { byte[] data = IOUtils.toByteArray(inputStream); return this.upload(data, path); } catch (IOException e) { try { throw new Exception("上傳文件失敗", e); } catch (Exception e1) { e1.printStackTrace(); return null; } } } @Override public String uploadSuffix(byte[] data, String suffix) { return upload(data, getPath(config.getQcloudPrefix(), suffix)); } @Override public String uploadSuffix(InputStream inputStream, String suffix) { return upload(inputStream, getPath(config.getQcloudPrefix(), suffix)); } }