Ver código fonte

优化图片从ftp问题

wuxw 6 anos atrás
pai
commit
5c24c624a0

+ 1 - 1
Api/src/main/java/com/java110/api/listener/file/GetFileByObjIdListener.java

@@ -70,7 +70,7 @@ public class GetFileByObjIdListener extends AbstractServiceApiListener {
         Assert.listOnlyOne(fileRelDtos,"存在多条数据或未存在数据");
 
         FileDto fileDto = BeanConvertUtil.covertBean(reqJson, FileDto.class);
-        fileDto.setFileId(fileRelDtos.get(0).getFileSaveName());
+        fileDto.setFileSaveName(fileRelDtos.get(0).getFileSaveName());
         List<FileDto> fileDtos = fileInnerServiceSMOImpl.queryFiles(fileDto);
 
         Assert.listOnlyOne(fileDtos,"存在多个文件,数据错误" + reqJson.toJSONString());

+ 15 - 4
Api/src/main/java/com/java110/api/listener/file/GetFileListener.java

@@ -5,7 +5,9 @@ import com.java110.api.listener.AbstractServiceApiListener;
 import com.java110.core.annotation.Java110Listener;
 import com.java110.core.context.DataFlowContext;
 import com.java110.core.smo.file.IFileInnerServiceSMO;
+import com.java110.core.smo.file.IFileRelInnerServiceSMO;
 import com.java110.dto.file.FileDto;
+import com.java110.dto.file.FileRelDto;
 import com.java110.event.service.api.ServiceDataFlowEvent;
 import com.java110.utils.constant.ServiceCodeServiceConstant;
 import com.java110.utils.util.Assert;
@@ -28,6 +30,9 @@ public class GetFileListener extends AbstractServiceApiListener {
     @Autowired
     private IFileInnerServiceSMO fileInnerServiceSMOImpl;
 
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
     @Override
     public String getServiceCode() {
         return ServiceCodeServiceConstant.GET_FILE;
@@ -47,19 +52,25 @@ public class GetFileListener extends AbstractServiceApiListener {
 
     @Override
     protected void validate(ServiceDataFlowEvent event, JSONObject reqJson) {
-        Assert.hasKeyAndValue(reqJson,"fileId", "未包含文件ID");
-        Assert.hasKeyAndValue(reqJson,"communityId", "未包含小区ID");
+        Assert.hasKeyAndValue(reqJson, "fileId", "未包含文件ID");
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
         //super.validatePageInfo(reqJson);
     }
 
     @Override
     protected void doSoService(ServiceDataFlowEvent event, DataFlowContext context, JSONObject reqJson) {
 
-        FileDto fileDto = BeanConvertUtil.covertBean(reqJson, FileDto.class);
 
+        FileRelDto fileRelDto = new FileRelDto();
+        fileRelDto.setFileRealName(reqJson.getString("fileId"));
+        List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+
+        Assert.listOnlyOne(fileRelDtos, "查询到多条文件数据");
+        FileDto fileDto = new FileDto();
+        fileDto.setFileSaveName(fileRelDtos.get(0).getFileSaveName());
         List<FileDto> fileDtos = fileInnerServiceSMOImpl.queryFiles(fileDto);
 
-        Assert.listOnlyOne(fileDtos,"存在多个文件,数据错误" + reqJson.toJSONString());
+        Assert.listOnlyOne(fileDtos, "存在多个文件,数据错误" + reqJson.toJSONString());
 
         ApiFileVo fileVo = BeanConvertUtil.covertBean(fileDtos.get(0), ApiFileVo.class);
 

+ 11 - 0
CommonService/src/main/resources/java110.properties

@@ -1,3 +1,14 @@
 java110.mappingPath=classpath:mapper/*/*.xml
 
 
+# Single file max size
+java110.ftp.multipart.maxFileSize=100Mb
+# All files max size
+java110.ftp.multipart.maxRequestSize=100Mb
+
+#ftp use
+java110.ftpServer = 192.168.0.104
+java110.ftpPort = 6069
+java110.ftpUserName = uftp
+java110.ftpUserPassword = 123456
+java110.ftpPath = hc/

+ 5 - 5
WebService/src/main/resources/application-dev.yml

@@ -24,11 +24,11 @@ eureka:
       #defaultZone: http://localhost:8761/eureka/
 server:
   port: 8443
-  ssl:
-    keyStoreType: PKCS12
-    keyAlias: tomcat
-    key-store: classpath:keystore.p12
-    key-store-password: 12345678
+#  ssl:
+#    keyStoreType: PKCS12
+#    keyAlias: tomcat
+#    key-store: classpath:keystore.p12
+#    key-store-password: 12345678
   session:
       cookie:
         http-only: true

+ 4 - 4
WebService/src/main/resources/java110.properties

@@ -7,11 +7,11 @@ java110.ftp.multipart.maxFileSize=100Mb
 java110.ftp.multipart.maxRequestSize=100Mb
 
 #ftp use
-java110.ftpServer = 183.134.99.228
+java110.ftpServer = 192.168.0.104
 java110.ftpPort = 6069
-java110.ftpUserName = hcftp
-java110.ftpUserPassword = hcftp@2015
-java110.ftpPath = /home/hcftp/
+java110.ftpUserName = uftp
+java110.ftpUserPassword = 123456
+java110.ftpPath = hc/
 
 
 

+ 37 - 39
java110-utils/src/main/java/com/java110/utils/util/FtpUpload.java

@@ -13,7 +13,7 @@ import java.io.*;
 import java.util.UUID;
 
 public class FtpUpload {
-    private static Logger logger = LoggerFactory.getLogger(FtpUpload.class);
+//    private static Logger logger = LoggerFactory.getLogger(FtpUpload.class);
 
     /*
      * private static String server = "www.datasvisser.cn"; //地址 private static
@@ -51,7 +51,20 @@ public class FtpUpload {
             if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
                 LOCAL_CHARSET = "UTF-8";
             }
-            fileName = UUID.randomUUID().toString() + DEFAULT_IMG_SUFFIX;
+            fileName = UUID.randomUUID().toString();
+
+            if (imageBase64.contains("data:image/png;base64,")) {
+                imageBase64 = imageBase64.replace("data:image/png;base64,", "");
+                fileName += ".png";
+            }else if(imageBase64.contains("data:image/jpeg;base64,")){
+                imageBase64 = imageBase64.replace("data:image/jpeg;base64,", "");
+                fileName += ".jpg";
+            }else if(imageBase64.contains("data:image/webp;base64,")){
+                imageBase64 = imageBase64.replace("data:image/webp;base64,", "");
+                fileName += ".jpg";
+            }else{
+                fileName += ".jpg";
+            }
             FTPFile[] fs = ftpClient.listFiles(fileName);
             if (fs.length == 0) {
                 System.out.println("this file not exist ftp");
@@ -59,21 +72,24 @@ public class FtpUpload {
                 System.out.println("this file exist ftp");
                 ftpClient.deleteFile(fs[0].getName());
             }
-            ByteArrayInputStream is = new ByteArrayInputStream(Base64Convert.base64ToByte(imageBase64));
+
+
+            byte[] context = Base64Convert.base64ToByte(imageBase64);
+            ByteArrayInputStream is = new ByteArrayInputStream(context);
             boolean saveFlag = ftpClient.storeFile(fileName, is);
             is.close();
             if (!saveFlag) {
                 throw new IllegalArgumentException("存储文件失败");
             }
         } catch (Exception e) {
-            logger.error("上传文件失败", e);
+            //logger.error("上传文件失败", e);
             throw new IllegalArgumentException("上传文件失败");
         } finally {
             try {
                 ftpClient.disconnect();
             } catch (IOException e) {
                 e.printStackTrace();
-                logger.error("关闭ftpClient 失败", e);
+                //logger.error("关闭ftpClient 失败", e);
             }
         }
         return IMAGE_DEFAULT_PATH + DateUtil.getNowII() + "/" + fileName;
@@ -115,7 +131,7 @@ public class FtpUpload {
                 throw new IllegalArgumentException("存储文件失败");
             }
         } catch (Exception e) {
-            logger.error("上传文件失败", e);
+           // logger.error("上传文件失败", e);
             throw new IllegalArgumentException("上传文件失败");
         } finally {
             try {
@@ -136,50 +152,32 @@ public class FtpUpload {
             ftpClient.connect(server, port);
             ftpClient.login(userName, userPassword);
             ftpClient.enterLocalPassiveMode();
-            if (remotePath != null && !remotePath.equals("")) {
-                ftpClient.changeWorkingDirectory(remotePath);
-                System.out.println("file success");
-            }
-
             if (ftpClient != null) {
-
-                FTPFile[] files = ftpClient.listFiles();
-                for (FTPFile file : files) {
-                    String f = new String(file.getName().getBytes("iso-8859-1"), "utf-8");//防止乱码
-                    System.out.println(f);
-                    System.out.println(f.equals(fileName));
-                    if (f.equals(fileName)) {
-                        InputStream ins = ftpClient.retrieveFileStream(file.getName());//需使用file.getName获值,若用f会乱码
-                        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-                        byte[] buf = new byte[204800];
-                        int bufsize = 0;
-                        while ((bufsize = ins.read(buf, 0, buf.length)) != -1) {
-                            byteOut.write(buf, 0, bufsize);
-                        }
-                        return_arraybyte = byteOut.toByteArray();
-
-                        File localFile = new File(localpath + fileSeparator + f);
-                        OutputStream is = new FileOutputStream(localFile);
-                        ftpClient.retrieveFile(f, is);
-                        is.close();
-                        byteOut.close();
-                        ins.close();
-                        break;
-                    }
+                String f = new String(
+                        (remotePath + fileName).getBytes("GBK"),
+                        FTP.DEFAULT_CONTROL_ENCODING);//防止乱码
+                InputStream ins = ftpClient.retrieveFileStream(f);//需使用file.getName获值,若用f会乱码
+                ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+                byte[] buf = new byte[204800];
+                int bufsize = 0;
+                while (ins != null && (bufsize = ins.read(buf, 0, buf.length)) != -1) {
+                    byteOut.write(buf, 0, bufsize);
+                }
+                return_arraybyte = byteOut.toByteArray();
+                byteOut.close();
+                if(ins != null) {
+                    ins.close();
                 }
-
             }
-
         } catch (Exception e) {
             e.printStackTrace();
-            logger.error("从ftp读取文件失败", e);
+            //logger.error("从ftp读取文件失败", e);
         } finally {
             closeConnect();
         }
         return return_arraybyte;
     }
 
-
     public static void closeConnect() {
         try {
             ftpClient.disconnect();