diff --git a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java index 72d828892582a231e481f52b777e2747ef95b705..6c885711585039e0ba8e612f980748aaff483bac 100644 --- a/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java +++ b/litemall-admin-api/src/main/java/org/linlinjava/litemall/admin/web/AdminStorageController.java @@ -43,17 +43,49 @@ public class AdminStorageController { return ResponseUtil.ok(data); } + private String generateKey(String originalFilename){ + int index = originalFilename.lastIndexOf('.'); + String suffix = originalFilename.substring(index); + + String key = null; + LitemallStorage storageInfo = null; + + do{ + key = CharUtil.getRandomString(20) + suffix; + storageInfo = litemallStorageService.findByKey(key); + } + while(storageInfo != null); + + return key; + } @PostMapping("/create") public Object create(@LoginAdmin Integer adminId, @RequestParam("file") MultipartFile file) throws IOException { - if (adminId == null) { + if(adminId == null){ return ResponseUtil.unlogin(); } String originalFilename = file.getOriginalFilename(); - String url = storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), originalFilename); - Map data = new HashMap<>(); - data.put("url", url); - return ResponseUtil.ok(data); + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + } catch (IOException e) { + e.printStackTrace(); + return ResponseUtil.badArgumentValue(); + } + String key = generateKey(originalFilename); + storageService.store(file.getInputStream(), file.getSize(), file.getContentType(), key); + + String url = storageService.generateUrl(key); + LitemallStorage storageInfo = new LitemallStorage(); + storageInfo.setName(originalFilename); + storageInfo.setSize((int)file.getSize()); + storageInfo.setType(file.getContentType()); + storageInfo.setAddTime(LocalDateTime.now()); + storageInfo.setModified(LocalDateTime.now()); + storageInfo.setKey(key); + storageInfo.setUrl(url); + litemallStorageService.add(storageInfo); + return ResponseUtil.ok(storageInfo); } @PostMapping("/read") diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/QiniuStorage.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/QiniuStorage.java index 1665018b467e92105089b01af4cfdcf5525627ce..b3140e10afda47d83087bcf5416ec06d666afa18 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/QiniuStorage.java +++ b/litemall-core/src/main/java/org/linlinjava/litemall/core/storage/QiniuStorage.java @@ -1,10 +1,12 @@ package org.linlinjava.litemall.core.storage; +import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; @@ -17,13 +19,14 @@ import java.util.stream.Stream; public class QiniuStorage implements Storage { - private String endpoint; + private String endpoint; private String accessKey; private String secretKey; private String bucketName; private String upToken; private UploadManager uploadManager; private BucketManager bucketManager; + private DefaultPutRet putRet; public String getEndpoint() { return endpoint; @@ -62,14 +65,12 @@ public class QiniuStorage implements Storage { */ @Override public void store(InputStream inputStream, long contentLength, String contentType, String keyName) { - if(uploadManager == null){ - uploadManager = new UploadManager(new Configuration()); - Auth auth = Auth.create(accessKey, secretKey); - upToken = auth.uploadToken(bucketName); - } - + uploadManager = new UploadManager(new Configuration()); + Auth auth = Auth.create(accessKey, secretKey); + upToken = auth.uploadToken(bucketName); try { Response response = uploadManager.put(inputStream, keyName, upToken, null, contentType); + putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); } catch (QiniuException ex) { ex.printStackTrace(); } @@ -103,20 +104,20 @@ public class QiniuStorage implements Storage { @Override public void delete(String keyName) { - if(bucketManager == null){ + if (bucketManager == null) { Auth auth = Auth.create(accessKey, secretKey); - bucketManager = new BucketManager(auth, new Configuration() ); + bucketManager = new BucketManager(auth, new Configuration()); } try { bucketManager.delete(bucketName, keyName); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @Override public String generateUrl(String keyName) { - return endpoint + "/" + keyName; + return endpoint + "/" + putRet.key; } }