ycl-common/src/main/java/com/ycl/controller/FileController.java
@@ -1,18 +1,14 @@ package com.ycl.controller; import com.ycl.api.CommonResult; import com.ycl.dto.media.Media; import com.ycl.dto.media.PictureZoomParameter; import com.ycl.service.oss.OssService; import com.ycl.utils.AliyunUtils; import com.ycl.utils.MediaFileUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @RestController @Api(tags = "文件上传") @@ -75,5 +71,12 @@ return CommonResult.failed("fail!"); } @ApiOperation(value = "上传视频") @PostMapping("/video") public CommonResult<String> uploadVideo(MultipartFile file) { String url = ossService.uploadVideo(file); return CommonResult.success(url, "ok"); } } ycl-common/src/main/java/com/ycl/service/oss/OssService.java
@@ -20,4 +20,6 @@ boolean deleteImages(String fileUrl); String uploadImages(InputStream inputStream, String ext); String uploadVideo(MultipartFile file); } ycl-common/src/main/java/com/ycl/service/oss/impl/OssServiceImpl.java
@@ -1,9 +1,7 @@ package com.ycl.service.oss.impl; import com.aliyun.oss.ClientBuilderConfiguration; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.common.comm.Protocol; import com.aliyun.oss.model.ObjectMetadata; import com.ycl.service.oss.OssService; import com.ycl.utils.ConstantPropertiesUtils; @@ -14,13 +12,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.UUID; @Service public class OssServiceImpl implements OssService { @@ -144,6 +138,42 @@ } } @Override public String uploadVideo(MultipartFile file) { if (file == null) { return "上传视频为空"; } String endpoint = ConstantPropertiesUtils.END_POINT; String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtils.BUCKET_NAME; // 创建OSSClient实例 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件流 try { // 获取文件的名称 String fileName = "sczf/" + file.getOriginalFilename(); ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf(".")))); // 调用oss的方法实现长传 // 第一个参数 bucketName // 第二个参数 上传到oss的文件路径和文件名称 ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(file.getBytes()), objectMetadata); // 关闭OSSClient。 ossClient.shutdown(); // 把上传的文件路径返回 (手动拼接) // 这里设置图片有效时间 我设置了30年 Date expiration = new Date(System.currentTimeMillis() + (long) 946080000 * 1000); String url = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString(); return url; } catch (Exception e) { System.out.println("uploadImages上传视频失败:"); // e.printStackTrace(); return null; } } public static String getcontentType(String FilenameExtension) { if (FilenameExtension.equalsIgnoreCase(".mp4")||FilenameExtension.equalsIgnoreCase(".mov")) { return "video/mp4"; ycl-platform/src/main/java/com/ycl/common/constant/DingConst.java
@@ -87,4 +87,11 @@ */ String SEND_DING_WORK_LINK = "dingtalkind://dingtalkclient/page/link?url="; /** * 获取视频 */ String GET_VIDEO="/media/video"; } ycl-platform/src/main/java/com/ycl/config/DingConfig.java
@@ -6,8 +6,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import static com.ycl.common.constant.DingConst.*; @Data @Component @ConfigurationProperties("zzding") @@ -17,6 +15,7 @@ private String domainName; private String protocal; private String tenantId; private String mediaId; @Bean public ExecutableClient executableClient() { ycl-platform/src/main/java/com/ycl/controller/dingding/DingController.java
@@ -19,18 +19,23 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.ycl.common.constant.DingConst.GET_TIKER; import static com.ycl.common.constant.DingConst.GET_TOKEN; import static com.ycl.common.constant.DingConst.*; @RestController @RequestMapping("/ding") @@ -137,7 +142,6 @@ @GetMapping("/addressBook") public CommonResult<List<AddressBookVO>> getAddressBook() { AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); return CommonResult.success(dingService.getAddressBook(user.getUserId())); } @@ -165,5 +169,47 @@ return CommonResult.success(bookRemarkService.updateRemark(user, userId, remark)); } private String getVideo(String accToken) { CloseableHttpResponse response = null; //调用API GetClient getClient = executableClient.newGetClient(GET_VIDEO); //设置参数 try { if (ObjectUtil.isNotNull(accToken)) { getClient.addParameter("accessToken", accToken); getClient.addParameter("mediaId", dingConfig.getMediaId()); // String result = getClient.get(); // return parsingResult(result); response = getClient.getB(); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); File voice = new File("/Users/video/log1.xlsx"); OutputStream fos = new FileOutputStream(voice); int cache = 10 * 1024; byte[] buffer = new byte[cache]; int ch = 0; while ((ch = is.read(buffer)) != -1) { fos.write(buffer, 0, ch); } is.close(); fos.flush(); fos.close(); } } catch (Exception e) { e.printStackTrace(); }finally { if (response != null) { try { //特别提醒:需要调用response的close方法关闭网络连接!!! response.close(); } catch (Exception e) { e.printStackTrace(); } } } return null; } }