|
@@ -0,0 +1,125 @@
|
|
|
+package com.zskk.dicom.oss;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
+import org.apache.http.util.TextUtils;
|
|
|
+
|
|
|
+import com.aliyun.oss.OSSClient;
|
|
|
+import com.aliyun.oss.common.utils.IOUtils;
|
|
|
+import com.aliyun.oss.model.Callback;
|
|
|
+import com.aliyun.oss.model.Callback.CalbackBodyType;
|
|
|
+import com.aliyun.oss.model.PutObjectRequest;
|
|
|
+import com.aliyun.oss.model.PutObjectResult;
|
|
|
+import com.zskk.dicom.config.NetCodeConfig;
|
|
|
+import com.zskk.dicom.config.OSSConfig;
|
|
|
+import com.zskk.dicom.response.BaseResponse;
|
|
|
+import com.zskk.dicom.response.ZskkResponseFactory;
|
|
|
+import com.zskk.dicom.response.bean.FileUploadChcekResponseBean;
|
|
|
+
|
|
|
+public class OSSFileAndCallbackHleper implements BaseOSSHleper {
|
|
|
+
|
|
|
+ private static class OSSHleperHoler {
|
|
|
+ private static OSSFileAndCallbackHleper INSTANCE = new OSSFileAndCallbackHleper();
|
|
|
+ }
|
|
|
+ public static OSSFileAndCallbackHleper getInstance() {
|
|
|
+ return OSSHleperHoler.INSTANCE;
|
|
|
+ }
|
|
|
+ private OSSClient instance;
|
|
|
+ private OSSFileAndCallbackHleper() {
|
|
|
+ instance = new OSSClient(OSSConfig.ENDPOINT, OSSConfig.ACCESS_KEY_ID, OSSConfig.ACCESS_KEY_SECRET);
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public BaseResponse check(String filePath) {
|
|
|
+ BaseResponse exception = null;
|
|
|
+ if(TextUtils.isEmpty(filePath)) {
|
|
|
+ return NetCodeConfig.FILE_PATH_IS_NULL;
|
|
|
+ }
|
|
|
+ File file = new File(filePath);
|
|
|
+ if(!file.exists()) {
|
|
|
+ return NetCodeConfig.FILE_IS_NOT_FOUND;
|
|
|
+ }
|
|
|
+ if(!file.isFile()) {
|
|
|
+ return NetCodeConfig.FILE_IS_NOT_FILE;
|
|
|
+ }
|
|
|
+ FileInputStream fis = null;
|
|
|
+ String md5 = null;
|
|
|
+ Exception error = null;
|
|
|
+ try {
|
|
|
+ fis = new FileInputStream(file);
|
|
|
+ md5 = DigestUtils.md5Hex(IOUtils.readStreamAsByteArray(fis));
|
|
|
+ fis.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ error = e;
|
|
|
+ }
|
|
|
+ if(error != null) {
|
|
|
+ return NetCodeConfig.FILE_RUNTIME.setError(error);
|
|
|
+ }
|
|
|
+ boolean isExist = instance.doesObjectExist(OSSConfig.BUCKET_NAME, md5);
|
|
|
+ if(isExist) {
|
|
|
+ return NetCodeConfig.FILE_ALIOSS_FILE_ALREADY;
|
|
|
+ }
|
|
|
+ return ZskkResponseFactory.getInstance().generateSuccess().setData(new FileUploadChcekResponseBean(md5,file));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResponse upload(String filePath) {
|
|
|
+ BaseResponse<FileUploadChcekResponseBean> response = check(filePath);
|
|
|
+ if(response.isError()) {
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ FileUploadChcekResponseBean data = response.getData();
|
|
|
+ String md5 = data.filename;
|
|
|
+ File file = data.file;
|
|
|
+ Exception error = null;
|
|
|
+
|
|
|
+// try {
|
|
|
+// instance.putObject(OSSConfig.BUCKET_NAME, md5, file);
|
|
|
+// } catch (Exception e) {
|
|
|
+// error = e;
|
|
|
+// } finally {
|
|
|
+// if(instance != null) {
|
|
|
+// instance.shutdown();
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest(OSSConfig.BUCKET_NAME, md5, file);
|
|
|
+
|
|
|
+ // 上传回调参数。
|
|
|
+ Callback callback = new Callback();
|
|
|
+ callback.setCallbackUrl(OSSConfig.ALIYUN_OSS_CALLBACK_URL + "?md5=" + md5);
|
|
|
+ // 设置回调请求消息头中Host的值,如oss-cn-hangzhou.aliyuncs.com。
|
|
|
+// callback.setCallbackHost(OSSConfig.ENDPOINT);
|
|
|
+ // 设置发起回调时请求body的值。
|
|
|
+ callback.setCallbackBody("{\\\"mimeType\\\":1,\\\"size\\\":2}");
|
|
|
+ // 设置发起回调请求的Content-Type。
|
|
|
+ callback.setCalbackBodyType(CalbackBodyType.JSON);
|
|
|
+ // 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。
|
|
|
+ callback.addCallbackVar("x:url-md5", "http://zskk.oss-cn-beijing.aliyuncs.com/" + md5);
|
|
|
+// callback.addCallbackVar("x:var2", "value2");
|
|
|
+ putObjectRequest.setCallback(callback);
|
|
|
+
|
|
|
+ PutObjectResult putObjectResult = instance.putObject(putObjectRequest);
|
|
|
+
|
|
|
+ // 读取上传回调返回的消息内容。
|
|
|
+ byte[] buffer = new byte[1024];
|
|
|
+ try {
|
|
|
+ putObjectResult.getCallbackResponseBody().read(buffer);
|
|
|
+ putObjectResult.getCallbackResponseBody().close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
|
|
|
+
|
|
|
+
|
|
|
+ // 关闭OSSClient。
|
|
|
+ instance.shutdown();
|
|
|
+ if(error != null) {
|
|
|
+ return NetCodeConfig.FILE_ALIOSS_UPLOAD.setError(error);
|
|
|
+ }
|
|
|
+ return ZskkResponseFactory.getInstance().generateSuccess();
|
|
|
+ }
|
|
|
+}
|