diff --git a/epmet-module/epmet-oss/epmet-oss-server/pom.xml b/epmet-module/epmet-oss/epmet-oss-server/pom.xml
index b73264233b..ffb777fe7c 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/pom.xml
+++ b/epmet-module/epmet-oss/epmet-oss-server/pom.xml
@@ -92,6 +92,10 @@
             fastdfs-client
             ${fastdfs.version}
         
+        
+            org.springframework
+            spring-test
+        
     
 
     
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java
index 8eb6fb6eba..fd4002d57b 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AbstractCloudStorageService.java
@@ -11,6 +11,7 @@ package com.epmet.cloud;
 import com.epmet.commons.tools.utils.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
 import java.util.UUID;
@@ -75,4 +76,10 @@ public abstract class AbstractCloudStorageService {
      */
     public abstract String uploadSuffix(InputStream inputStream, String suffix);
 
+    /**
+     * 文件下载
+     * sun
+     */
+    public abstract void down() throws IOException;
+
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java
index e3c3850bff..e55449ad0f 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/AliyunCloudStorageService.java
@@ -9,10 +9,13 @@
 package com.epmet.cloud;
 
 import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.DownloadFileRequest;
+import com.aliyun.oss.model.DownloadFileResult;
 import com.epmet.commons.tools.exception.RenException;
 import com.epmet.exception.ModuleErrorCode;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 
 /**
@@ -54,4 +57,55 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService {
     public String uploadSuffix(InputStream inputStream, String suffix) {
         return upload(inputStream, getPath(config.getAliyunPrefix(), suffix));
     }
+
+    @Override
+    public void down() throws IOException {
+        OSSClient client = new OSSClient(config.getAliyunEndPoint(), config.getAliyunAccessKeyId(),
+                config.getAliyunAccessKeySecret());
+        try {
+
+            /*
+            //方式一
+            File file = new File("C:/Users/Administrator/Desktop/dd/df.jpg");
+            client.getObject(new GetObjectRequest(config.getAliyunBucketName(), "epmet/test/20201103/198f3c11490a44eb964c5c8e9989a507.jpg"), file);*/
+
+            /*
+            //方式二
+            OSSObject oo = client.getObject(config.getAliyunBucketName(), path);
+            InputStream is = oo.getObjectContent();
+            OutputStream os = null;
+            File file = new File("C:/Users/Administrator/Desktop/dd/aa.jpg");
+            try {
+                os = new FileOutputStream(file);
+                int len = 0;
+                byte[] buffer = new byte[8192];
+                while ((len = is.read(buffer)) != -1) {
+                    os.write(buffer, 0, len);
+                }
+            } finally {
+                os.close();
+                is.close();
+            }*/
+
+            //方式三
+            DownloadFileRequest downloadFileRequest = new DownloadFileRequest(config.getAliyunBucketName(), "epmet/test/20201103/198f3c11490a44eb964c5c8e9989a507.jpg");
+            downloadFileRequest.setDownloadFile("C:/Users/Administrator/Desktop/dd/4.jpg");// 本地下载文件名称
+            downloadFileRequest.setPartSize(1 * 1024 * 1024);// 分片大小,取值范围为1B~5GB。
+            downloadFileRequest.setTaskNum(10);//10个任务并发下载,默认值为1
+            downloadFileRequest.setEnableCheckpoint(true);// 启动断点续传
+            // 下载文件
+            DownloadFileResult downloadRes = client.downloadFile(downloadFileRequest);
+            // 下载成功时,会返回文件元信息。
+            downloadRes.getObjectMetadata();
+
+            // 关闭OSSClient。
+            client.shutdown();
+        } catch (Exception e){
+            throw new RenException(ModuleErrorCode.OSS_UPLOAD_FILE_ERROR, e, "");
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
+        }
+
+    }
+
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java
index eef3d53171..9661e5f054 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/FastDFSCloudStorageService.java
@@ -15,6 +15,7 @@ import com.epmet.commons.tools.utils.SpringContextUtils;
 import com.epmet.exception.ModuleErrorCode;
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 
 /**
@@ -59,4 +60,9 @@ public class FastDFSCloudStorageService extends AbstractCloudStorageService {
     public String uploadSuffix(InputStream inputStream, String suffix) {
         return upload(inputStream, suffix);
     }
+
+    @Override
+    public void down() throws IOException {
+
+    }
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java
index 211736c173..71c17580c5 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/LocalCloudStorageService.java
@@ -53,4 +53,9 @@ public class LocalCloudStorageService extends AbstractCloudStorageService {
     public String uploadSuffix(InputStream inputStream, String suffix) {
         return upload(inputStream, getPath(config.getLocalPrefix(), suffix));
     }
+
+    @Override
+    public void down() throws IOException {
+
+    }
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java
index 03376f75eb..22d7da2219 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QcloudCloudStorageService.java
@@ -83,4 +83,9 @@ public class QcloudCloudStorageService extends AbstractCloudStorageService {
     public String uploadSuffix(InputStream inputStream, String suffix) {
         return upload(inputStream, getPath(config.getQcloudPrefix(), suffix));
     }
+
+    @Override
+    public void down() throws IOException {
+
+    }
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java
index 3c51425619..0fa9ee9f7e 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/cloud/QiniuCloudStorageService.java
@@ -77,4 +77,9 @@ public class QiniuCloudStorageService extends AbstractCloudStorageService {
     public String uploadSuffix(InputStream inputStream, String suffix) {
         return upload(inputStream, getPath(config.getQiniuPrefix(), suffix));
     }
+
+    @Override
+    public void down() throws IOException {
+
+    }
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
index 5b3e3bee6b..65cf6b2d2d 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/controller/OssController.java
@@ -31,12 +31,17 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
+import org.apache.http.entity.ContentType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Map;
 
@@ -218,4 +223,18 @@ public class OssController {
 		return ossService.uploadImg(file);
 	}
 
+	/**
+	 * @param byteFile  fileName
+	 * @Description 外挂-文件上传
+	 * @Author sun
+	 **/
+	@PostMapping("ext/upload")
+	public Result extUpload(@RequestParam("byteFile") byte[] byteFile, @RequestParam("fileName") String fileName) throws IOException {
+	//public Result extUpload(@RequestParam("file") MultipartFile file, @RequestParam("fileName") String fileName) throws IOException {
+		//byte[] byteFile = file.getBytes();
+		InputStream inputStream = new ByteArrayInputStream(byteFile);
+		MultipartFile filse = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);
+		return ossService.extUpload(filse,fileName);
+	}
+
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java
index 2195e4f0f1..c67fec06f2 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/OssService.java
@@ -29,4 +29,6 @@ public interface OssService extends BaseService {
 	int insertOssEntity(OssEntity ossEntity);
 
 	Result uploadImg(MultipartFile file);
+
+	Result extUpload(MultipartFile file, String fileName);
 }
diff --git a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
index 6ca5626490..cc44456c7e 100644
--- a/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
+++ b/epmet-module/epmet-oss/epmet-oss-server/src/main/java/com/epmet/service/impl/OssServiceImpl.java
@@ -72,4 +72,36 @@ public class OssServiceImpl extends BaseServiceImpl implement
 		dto.setUrl(url);
 		return new Result().ok(dto);
 	}
+
+	@Override
+	public Result extUpload(MultipartFile file, String fileName) {
+		try {
+			OssFactory.build().down();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
+		if (file.isEmpty()) {
+			return new Result().error(ModuleErrorCode.UPLOAD_FILE_EMPTY);
+		}
+		//上传文件
+		String extension = FilenameUtils.getExtension(fileName);
+		String url = null;
+		try {
+			url = OssFactory.build().uploadSuffix(file.getBytes(), extension);
+		} catch (IOException e) {
+			e.printStackTrace();
+			logger.error("图片上传异常");
+			throw new RenException("图片上传异常");
+
+		}
+		//保存文件信息
+		OssEntity ossEntity = new OssEntity();
+		ossEntity.setUrl(url);
+		baseDao.insert(ossEntity);
+		//文件信息
+		UploadImgResultDTO dto = new UploadImgResultDTO();
+		dto.setUrl(url);
+		return new Result().ok(dto);
+	}
 }