Parcourir la source

优化OSS读写方法;增加spring-mvc上传配置

luoshi il y a 4 ans
Parent
commit
526652caf5

+ 8 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/file/service/impl/FileServiceImpl.java

@@ -7,6 +7,7 @@ import cn.com.qmth.stmms.biz.file.store.FileStore;
 import cn.com.qmth.stmms.biz.file.store.impl.DiskStore;
 import cn.com.qmth.stmms.biz.file.store.impl.OssStore;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -16,7 +17,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 @Service("fileService")
-public class FileServiceImpl implements FileService, InitializingBean {
+public class FileServiceImpl implements FileService, InitializingBean, DisposableBean {
 
     private static final String COMMON_PLACEHOLDER = "common";
 
@@ -233,6 +234,11 @@ public class FileServiceImpl implements FileService, InitializingBean {
         }
     }
 
+    @Override
+    public void destroy() throws Exception {
+        store.close();
+    }
+
     public static void main(String[] args) throws Exception {
         FileServiceImpl service = new FileServiceImpl();
         service.fileServer = "123";
@@ -246,4 +252,5 @@ public class FileServiceImpl implements FileService, InitializingBean {
         service.downloadSheet(1, "16110003", 1);
         System.out.println("success");
     }
+
 }

+ 9 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/file/store/impl/DiskStore.java

@@ -6,7 +6,10 @@ import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 
@@ -32,9 +35,7 @@ public class DiskStore implements FileStore {
 
     @Override
     public void write(String path, InputStream ins, String md5) throws Exception {
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-        IOUtils.copy(ins, buffer);
-        byte[] data = buffer.toByteArray();
+        byte[] data = IOUtils.toByteArray(ins);
         if (!BinaryUtil.encodeMD5(data).equalsIgnoreCase(md5)) {
             throw new RuntimeException("md5 validate faile");
         }
@@ -69,4 +70,8 @@ public class DiskStore implements FileStore {
         return file.exists() && file.isFile();
     }
 
+    @Override
+    public void close() {
+    }
+
 }

+ 12 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/file/store/impl/OssStore.java

@@ -29,29 +29,25 @@ public class OssStore implements FileStore {
 
     private static final Pattern CONFIG_PATTERN = Pattern.compile("^oss://([\\w]+):([\\w]+)@([\\w-]+).([\\w-.]+)$");
 
-    private String endpoint;
+    private OSS ossClient;
 
     private String bucket;
 
-    private String accessKey;
-
-    private String accessSecret;
-
     public OssStore(String config) {
         String message = "[file.store]" + config + ": pattern error";
         Matcher m = CONFIG_PATTERN.matcher(config);
         if (m.find()) {
-            accessKey = StringUtils.trimToNull(m.group(1));
-            accessSecret = StringUtils.trimToNull(m.group(2));
+            String accessKey = StringUtils.trimToNull(m.group(1));
+            String accessSecret = StringUtils.trimToNull(m.group(2));
             bucket = StringUtils.trimToNull(m.group(3));
-            endpoint = StringUtils.trimToNull(m.group(4));
+            String endpoint = StringUtils.trimToNull(m.group(4));
 
             Assert.notNull(accessKey, message);
             Assert.notNull(accessSecret, message);
             Assert.notNull(bucket, message);
             Assert.notNull(endpoint, message);
 
-            endpoint = ENDPOINT_PREFIX.concat(endpoint);
+            ossClient = new OSSClientBuilder().build(ENDPOINT_PREFIX.concat(endpoint), accessKey, accessSecret);
         } else {
             throw new IllegalArgumentException(message);
         }
@@ -59,32 +55,33 @@ public class OssStore implements FileStore {
 
     @Override
     public void write(String path, InputStream ins, String md5) throws Exception {
-        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, accessSecret);
         ObjectMetadata metadata = new ObjectMetadata();
         metadata.setContentMD5(BinaryUtil.toBase64String(Encodes.decodeHex(md5)));
         ossClient.putObject(bucket, path, ins, metadata);
-        ossClient.shutdown();
     }
 
     @Override
     public byte[] read(String path) throws Exception {
-        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, accessSecret);
         OSSObject ossObject = ossClient.getObject(bucket, path);
         ByteArrayOutputStream ous = new ByteArrayOutputStream();
         IOUtils.copy(ossObject.getObjectContent(), ous);
-        ossClient.shutdown();
+        ossObject.close();
         return ous.toByteArray();
     }
 
     @Override
     public boolean exist(String path) {
-        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKey, accessSecret);
         try {
             return ossClient.doesObjectExist(bucket, path);
         } catch (Exception e) {
             log.error("oss exist operate error", e);
             return false;
-        } finally {
+        }
+    }
+
+    @Override
+    public void close() {
+        if (ossClient != null) {
             ossClient.shutdown();
         }
     }

+ 8 - 1
stmms-web/src/main/webapp/WEB-INF/spring-mvc.xml

@@ -144,7 +144,14 @@
         </property>
     </bean>
 
-    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
+    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
+        <!--配置编码格式-->
+        <property name="defaultEncoding" value="utf-8"/>
+        <!--配置文件上传大小 最大100MB-->
+        <property name="maxUploadSize" value="104857600"/>
+        <!--配置缓存大小 最大1MB-->
+        <property name="maxInMemorySize" value="1048576"/>
+    </bean>
 
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
         <property name="ignoreResourceNotFound" value="true"/>