|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.api.base.IMesMediaFileCfgService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.config.HuaWeiCloudObsConfig;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.apiservice.utils.HuaWeiOBSUtil;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
|
|
|
|
|
import cn.estsh.i3plus.icloud.core.sdk.ICoreSysFileCloud;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
|
|
|
|
@ -12,7 +15,9 @@ import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
|
import com.aliyun.oss.model.PutObjectRequest;
|
|
|
|
|
import com.aliyun.oss.model.PutObjectResult;
|
|
|
|
|
import com.obs.services.ObsClient;
|
|
|
|
|
import com.obs.services.exception.ObsException;
|
|
|
|
|
import com.obs.services.model.*;
|
|
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
@ -22,12 +27,15 @@ import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
import org.testng.annotations.Optional;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -38,7 +46,7 @@ import java.util.UUID;
|
|
|
|
|
@Api("媒体文件维护")
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesMediaFileCfg")
|
|
|
|
|
public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg>{
|
|
|
|
|
public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg> {
|
|
|
|
|
public static final Logger LOGGER = LoggerFactory.getLogger(MesMediaFileCfgController.class);
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesMediaFileCfgRepository mediaFileCfgRepository;
|
|
|
|
@ -46,9 +54,151 @@ public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg
|
|
|
|
|
@Autowired
|
|
|
|
|
private ICoreSysFileCloud coreSysFileCloud;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
HuaWeiCloudObsConfig obsConfig;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesMediaFileCfgService mediaFileCfgService;
|
|
|
|
|
|
|
|
|
|
//默认大小
|
|
|
|
|
private static final long FILE_SIZE = 1024 * 1024;
|
|
|
|
|
|
|
|
|
|
@PostMapping(value = "/obs/upload")
|
|
|
|
|
@ApiOperation(value = "上传媒体文件")
|
|
|
|
|
public ResultBean obsUploadFile(@RequestParam("file") MultipartFile file, MesMediaFileCfg mesMediaFileCfg) {
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
if (file.isEmpty()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.REPORT.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("不允许上传空文件")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
// 校验文件大小
|
|
|
|
|
long size = file.getSize();
|
|
|
|
|
if (size > FILE_SIZE) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.REPORT.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("文件过大,请重新上传!")
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
|
|
|
|
|
PutObjectResult putObjectResult = HuaWeiOBSUtil.putObjectByMultipartFile(MesCommonConstant.OBS_END_POINT, fileName, file);
|
|
|
|
|
|
|
|
|
|
String objectUrl = putObjectResult.getObjectUrl();
|
|
|
|
|
|
|
|
|
|
return ResultBean.success("添加成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(putObjectResult);
|
|
|
|
|
} catch (ImppBusiException imppException) {
|
|
|
|
|
LOGGER.error(imppException.getErrorMsg() + ":{}", imppException.getErrorDetail(), imppException);
|
|
|
|
|
return ResultBean.fail(imppException);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation("下载文件")
|
|
|
|
|
@GetMapping("/obs/download")
|
|
|
|
|
public ResultBean obsDownloadFile(@RequestParam("filePath") String filePath, HttpServletResponse response, MesMediaFileCfg mesMediaFileCfg) {
|
|
|
|
|
InputStream inputStream = null;
|
|
|
|
|
OutputStream outputStream = null;
|
|
|
|
|
try {
|
|
|
|
|
// 读取文件
|
|
|
|
|
inputStream = HuaWeiOBSUtil.getObject(MesCommonConstant.OBS_END_POINT, mesMediaFileCfg.getFileName());
|
|
|
|
|
outputStream = response.getOutputStream();
|
|
|
|
|
response.setContentType("application/octet-stream");
|
|
|
|
|
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(mesMediaFileCfg.getFileName(), "UTF-8"));
|
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
|
int bytesRead;
|
|
|
|
|
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
|
|
|
|
outputStream.write(buffer, 0, bytesRead);
|
|
|
|
|
}
|
|
|
|
|
outputStream.flush();
|
|
|
|
|
inputStream.close();
|
|
|
|
|
outputStream.close();
|
|
|
|
|
return ResultBean.success("下载成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
|
|
|
|
} catch (ImppBusiException imppException) {
|
|
|
|
|
LOGGER.error(imppException.getErrorMsg() + ":{}", imppException.getErrorDetail(), imppException);
|
|
|
|
|
return ResultBean.fail(imppException);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ApiOperation("查看文件")
|
|
|
|
|
@GetMapping("/obs/query-file")
|
|
|
|
|
public ResultBean queryObjectFile(HttpServletResponse response, MesMediaFileCfg mesMediaFileCfg) {
|
|
|
|
|
|
|
|
|
|
InputStream inputStream = null;
|
|
|
|
|
OutputStream outputStream = null;
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
// InputStream object = HuaWeiOBSUtil.getObject(MesCommonConstant.OBS_END_POINT, mesMediaFileCfg.getFileName());
|
|
|
|
|
// 列举桶
|
|
|
|
|
ListBucketsRequest request = new ListBucketsRequest();
|
|
|
|
|
request.setQueryLocation(true);
|
|
|
|
|
ObsClient obsClient = obsConfig.getObsClient();
|
|
|
|
|
List<ObsBucket> buckets = obsClient.listBuckets(request);
|
|
|
|
|
for (ObsBucket bucket : buckets) {
|
|
|
|
|
LOGGER.info("BucketName:{},Location{}", bucket.getBucketName(),bucket.getLocation());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ResultBean.success("下载成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
|
|
|
|
} catch (ImppBusiException imppException) {
|
|
|
|
|
LOGGER.error(imppException.getErrorMsg() + ":{}", imppException.getErrorDetail(), imppException);
|
|
|
|
|
return ResultBean.fail(imppException);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ApiOperation("创建桶")
|
|
|
|
|
@GetMapping("/obs/createMesBucket")
|
|
|
|
|
public ResultBean CreateMesBucket() {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
CreateBucketRequest request = new CreateBucketRequest();
|
|
|
|
|
ObsClient obsClient = obsConfig.getObsClient();
|
|
|
|
|
ListBucketsRequest bucketsRequest = new ListBucketsRequest();
|
|
|
|
|
bucketsRequest.setQueryLocation(true);
|
|
|
|
|
List<ObsBucket> buckets = obsClient.listBuckets(bucketsRequest);
|
|
|
|
|
for (ObsBucket bucket : buckets) {
|
|
|
|
|
if(bucket.getBucketName().equals(MesCommonConstant.OBS_BUCKET_NAME)){
|
|
|
|
|
return ResultBean.success("已创建桶【mesbucket】").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//示例桶名
|
|
|
|
|
String exampleBucket = MesCommonConstant.OBS_BUCKET_NAME;
|
|
|
|
|
//示例桶区域位置
|
|
|
|
|
String exampleLocation = MesCommonConstant.OBS_LOCATION;
|
|
|
|
|
request.setBucketName(exampleBucket);
|
|
|
|
|
// 设置桶访问权限为私有读写,默认也是私有读写
|
|
|
|
|
request.setAcl(AccessControlList.REST_CANNED_PRIVATE);
|
|
|
|
|
// 设置桶的存储类别为标准存储
|
|
|
|
|
request.setBucketStorageClass(StorageClassEnum.STANDARD);
|
|
|
|
|
// 设置桶区域位置(以区域为中国-上海为例),location 需要与 endpoint的位置信息一致
|
|
|
|
|
request.setLocation(exampleLocation);
|
|
|
|
|
// 指定创建多AZ桶,如果不设置,默认创建单AZ桶
|
|
|
|
|
request.setAvailableZone(AvailableZoneEnum.MULTI_AZ);
|
|
|
|
|
// 创建桶
|
|
|
|
|
ObsBucket bucket = obsClient.createBucket(request);
|
|
|
|
|
|
|
|
|
|
} catch (ObsException e) {
|
|
|
|
|
LOGGER.error("Error Message:{}", e.getErrorMessage());
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ResultBean.success("创建成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@PostMapping(value = "/media-file/insert")
|
|
|
|
|
@ApiOperation(value = "上传媒体文件")
|
|
|
|
|
public ResultBean insertProduceCtgyPicture(@RequestParam("file") MultipartFile file, MesMediaFileCfg mesMediaFileCfg) {
|
|
|
|
@ -63,7 +213,7 @@ public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg
|
|
|
|
|
}
|
|
|
|
|
// 校验文件大小
|
|
|
|
|
long size = file.getSize();
|
|
|
|
|
if(size > FILE_SIZE){
|
|
|
|
|
if (size > FILE_SIZE) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.REPORT.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
@ -72,17 +222,17 @@ public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
String newName= UUID.randomUUID().toString()+fileName.substring(fileName.indexOf("."));
|
|
|
|
|
String newName = UUID.randomUUID().toString() + fileName.substring(fileName.indexOf("."));
|
|
|
|
|
|
|
|
|
|
String path="/tmp/media-file/";
|
|
|
|
|
String path = "/tmp/media-file/";
|
|
|
|
|
|
|
|
|
|
File saveFile=new File(path + newName);
|
|
|
|
|
if(!saveFile.getParentFile().exists()){
|
|
|
|
|
File saveFile = new File(path + newName);
|
|
|
|
|
if (!saveFile.getParentFile().exists()) {
|
|
|
|
|
saveFile.getParentFile().mkdirs();
|
|
|
|
|
}
|
|
|
|
|
file.transferTo(saveFile);
|
|
|
|
|
|
|
|
|
|
MesMediaFileCfg mesMediaFileCfg1=new MesMediaFileCfg();
|
|
|
|
|
MesMediaFileCfg mesMediaFileCfg1 = new MesMediaFileCfg();
|
|
|
|
|
mesMediaFileCfg1.setFileName(fileName);
|
|
|
|
|
mesMediaFileCfg1.setFileUrl(saveFile.getPath());
|
|
|
|
|
mesMediaFileCfg1.setFileType(mesMediaFileCfg.getFileType());
|
|
|
|
@ -99,7 +249,7 @@ public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg
|
|
|
|
|
|
|
|
|
|
@ApiOperation("下载文件")
|
|
|
|
|
@GetMapping("/download")
|
|
|
|
|
public ResultBean download(@RequestParam("filePath") String filePath, HttpServletResponse response){
|
|
|
|
|
public ResultBean download(@RequestParam("filePath") String filePath, HttpServletResponse response) {
|
|
|
|
|
|
|
|
|
|
InputStream inputStream = null;
|
|
|
|
|
OutputStream outputStream = null;
|
|
|
|
@ -128,70 +278,5 @@ public class MesMediaFileCfgController extends BaseMesController<MesMediaFileCfg
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// @ApiOperation("上传文件")
|
|
|
|
|
// @PostMapping("/download")
|
|
|
|
|
// public JsonResponse fileUpload(MultipartFile file) {
|
|
|
|
|
// ObsClient obsClient = null;
|
|
|
|
|
// String objectUrl="";
|
|
|
|
|
// try {
|
|
|
|
|
// String bucketName = hweiOBSConfig.getBucketName();
|
|
|
|
|
// obsClient = hweiOBSConfig.getInstance();
|
|
|
|
|
// // 上传文件到OBS
|
|
|
|
|
// long size = file.getSize();
|
|
|
|
|
// //1 200 兆字节=209715200 字节 1long=4个字节
|
|
|
|
|
// if (size<=0){
|
|
|
|
|
// throw new BusinessException("上传的文件为空");
|
|
|
|
|
// }
|
|
|
|
|
// if (size>52428800){
|
|
|
|
|
// throw new BusinessException("单次上传不能超过200M");
|
|
|
|
|
// }
|
|
|
|
|
// String objectKey = UUIDUtils.getRandomUUID()+file.getOriginalFilename();
|
|
|
|
|
// PutObjectRequest request = new PutObjectRequest(bucketName, objectKey, file.getInputStream());
|
|
|
|
|
// PutObjectResult putObjectResult= obsClient.putObject(request);
|
|
|
|
|
// objectUrl=objectKey;
|
|
|
|
|
// LOGGER.info("已上传对象的URL:{}", putObjectResult.getObjectUrl());
|
|
|
|
|
// LOGGER.info("生成的文件访问名:{}", objectKey);
|
|
|
|
|
// } catch (ObsException e) {
|
|
|
|
|
// LOGGER.error("obs上传失败:{}", LogExceptionStackUtil.logExceptionStack(e));
|
|
|
|
|
// return JsonResponse.error("obs上传失败");
|
|
|
|
|
// } catch (Exception e) {
|
|
|
|
|
// LOGGER.error("上传失败文件为空或者超过200M:{}", LogExceptionStackUtil.logExceptionStack(e));
|
|
|
|
|
// return JsonResponse.error("上传失败文件为空或者超过200M");
|
|
|
|
|
// } finally {
|
|
|
|
|
// hweiOBSConfig.destroy(obsClient);
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// return JsonResponse.ok(objectUrl);
|
|
|
|
|
// }
|
|
|
|
|
// @GetMapping("/download")
|
|
|
|
|
// @ApiOperation("下载文件")
|
|
|
|
|
// public void download(@RequestParam("fileName") String fileName , HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
|
//
|
|
|
|
|
// try (InputStream inputStream = hweiYunOBSService.fileDownload(fileName);
|
|
|
|
|
// BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream())){
|
|
|
|
|
//
|
|
|
|
|
// // 为防止 文件名出现乱码
|
|
|
|
|
// final String userAgent = request.getHeader("USER-AGENT");
|
|
|
|
|
// // IE浏览器
|
|
|
|
|
// if (StringUtils.contains(userAgent, "MSIE")) {
|
|
|
|
|
// fileName = URLEncoder.encode(fileName, "UTF-8");
|
|
|
|
|
// } else {
|
|
|
|
|
// // google,火狐浏览器
|
|
|
|
|
// if (StringUtils.contains(userAgent, "Mozilla")) {
|
|
|
|
|
// fileName = new String(fileName.getBytes(), "ISO8859-1");
|
|
|
|
|
// } else {
|
|
|
|
|
// // 其他浏览器
|
|
|
|
|
// fileName = URLEncoder.encode(fileName, "UTF-8");
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// response.setContentType("application/x-download");
|
|
|
|
|
// // 设置让浏览器弹出下载提示框,而不是直接在浏览器中打开
|
|
|
|
|
// response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
|
|
|
|
|
// IoUtil.copy(inputStream, outputStream);
|
|
|
|
|
// } catch (Exception e) {
|
|
|
|
|
// LOGGER.error("文件下载失败{}", e.logExceptionStack(e));
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|