派生自 projectDept/qhighschool

1
EricsHu
2023-06-15 13e13d59858f7159dabfa4981f62818405491e0d
1
9个文件已修改
157 ■■■■■ 已修改文件
src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/UserController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/HweiYunOBSController.java
@@ -23,6 +23,7 @@
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
 * @ClassName: ObsController
@@ -39,11 +40,12 @@
    private HweiYunOBSService hweiYunOBSService;
    @RequestMapping(value = "upload", method = RequestMethod.POST)
    public List<FileMeta> save(@RequestParam(value = "file", required = false) MultipartFile file) {
    public List<FileMeta> save(@RequestParam(value = "file", required = false) MultipartFile file) throws IOException {
        if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) {
            return null;
        }
//        if (FileUtil.isEmpty(file)) {
//            return new Result(false,"文件为空");
//        }
@@ -52,6 +54,22 @@
        return test;
    }
//    @RequestMapping(value = "fenpian", method = RequestMethod.POST)
//    public  Map<String, Object>  fpsave(@RequestParam(value = "file", required = false) MultipartFile file) throws IOException {
//
//        if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) {
//            return null;
//        }
//
////        if (FileUtil.isEmpty(file)) {
////            return new Result(false,"文件为空");
////        }
////        final List<FileMeta> test = hweiYunOBSService.fileUpload(file, file.getOriginalFilename());
//        Map<String, Object> fnepian = hweiYunOBSService.fnepian(file, file.getOriginalFilename());
////        return ResponseVO.ok("执行成功",test);
//        return fnepian;
//    }
    @RequestMapping(value = "delete", method = RequestMethod.POST)
    public Result delete(@RequestParam(value = "fileName", required = false)  String fileName) {
        if (StrUtil.isEmpty(fileName)) {
src/main/java/com/qxueyou/scc/controller/UserController.java
@@ -175,4 +175,12 @@
        return userRoleService.addRole(name,String.valueOf(roleType));
    }
    /**
     * 统计人数
     */
//    @PostMapping(value = "countUser")
//    public Result countUser() {
//        return userRoleService.addRole(name,String.valueOf(roleType));
//    }
}
src/main/java/com/qxueyou/scc/teach/res/service/HweiYunOBSService.java
@@ -4,8 +4,10 @@
import com.qxueyou.scc.base.model.FileMeta;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
/**
 * @Description 华为云OBS服务接口
@@ -42,6 +44,7 @@
     */
    List<FileMeta> fileUpload(MultipartFile uploadFile, String objectKey);
    List<FileMeta> fnepian(MultipartFile uploadFile,String objectKey) throws IOException;
    /**
     * @Description 文件下载
     * @author wuhuiju
src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java
@@ -19,14 +19,19 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.aspectj.util.FileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
 * @ClassName: HweiYunOBSServiceImpl
@@ -160,6 +165,115 @@
        return null;
    }
    @Override
    public List<FileMeta> fnepian(MultipartFile uploadFile, String objectKey) throws IOException {
        ObsClient obsClient = null;
        List<FileMeta> files = new ArrayList<FileMeta>(2);
        FileMeta fileMeta = null;
        // 每个分片的大小,用于计算文件有多少个分片。单位为字节。
        final long partSize = 10 * 1024 * 1024L;   //10 MB。
        String bucketName = hweiOBSConfig.getBucketName();
        obsClient = hweiOBSConfig.getInstance();
        // objectName 是路径,分片文件最终整合的路径
        String objectName = "multipartUpload/"+objectKey;
        // 创建InitiateMultipartUploadRequest对象。
        InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
        InitiateMultipartUploadResult prebuilt = obsClient.initiateMultipartUpload(request);
        InputStream inputStream = uploadFile.getInputStream();
        // 获取全局id
        String uploadId = prebuilt.getUploadId();
        // 如果并发量大的话 初始化线程池  20线程数量
        //  ExecutorService executorService = Executors.newFixedThreadPool(20);
        // partTags是PartEtag的集合。PartEtag由分片的ETag和分片号组成。
        List<PartEtag> partTags = new ArrayList<PartEtag>();
        File file = MultipartFileToFile(uploadFile);
        // 计算有多少个分片
        int partCount = (int) (file.length() / partSize);
        // 如果取余数不为零则追加一个
        if (file.length() % partSize != 0) {
            partCount++;
        }
        try {
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (file.length() - startPos) : partSize;
                // 跳过已经上传的分片。
                inputStream.skip(startPos);
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setObjectKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                uploadPartRequest.setInput(inputStream);
                // 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
                uploadPartRequest.setPartSize(curPartSize);
                // 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,Obs将返回InvalidArgument错误码。
                uploadPartRequest.setPartNumber( i + 1);
                // 每个分片不需要按顺序上传,甚至可以在不同客户端上传,obs会按照分片号排序组成完整的文件。
                UploadPartResult uploadPartResult = obsClient.uploadPart(uploadPartRequest);
                // 每次上传分片之后,ObS的返回结果包含PartETag。PartETag将被保存在partTags中。
                partTags.add(new PartEtag(uploadPartResult.getEtag(), uploadPartResult.getPartNumber()));
            }
            // 开始线程池时候使用:等待上传完成
         /*   executorService.shutdown();
            while (!executorService.isTerminated())
            {
                try
                {
                    executorService.awaitTermination(5, TimeUnit.SECONDS);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }*/
            fileMeta = new FileMeta();
            // 合并分片段
            // 在执行完成分片上传操作时,需要提供所有有效的partETags。obs收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,obs将把这些分片组合成一个完整的文件。
            CompleteMultipartUploadRequest multipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partTags);
            // 完成分片上传。
            CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(multipartUploadRequest);
            // 返回全局id,桶名,对象名称 用于后续处理 比如取消分片上传,查询分片信息等
            fileMeta.setPath(completeMultipartUploadResult.getObjectUrl());
            fileMeta.setFileSize(uploadFile.getSize() / 1024 + "kb");
            fileMeta.setFileType(uploadFile.getContentType());
            fileMeta.setFileName(objectKey);
            files.add(fileMeta);
            return files;
        }catch (Exception e){
            log.error("分片循环上传失败!"+e.getMessage());
            return null;
        }
    }
    public static File MultipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 若须要防止生成的临时文件重复,能够在文件名后添加随机码
        try {
            File file = File.createTempFile(getFileNameNotPrefix(fileName), prefix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 获取文件名不带后缀
     *
     * @param fileName
     * @return
     */
    public static String getFileNameNotPrefix(String fileName) {
        String prefix = fileName.substring(fileName.indexOf("."));
        int num = prefix.length();//得到后缀名长度
        String fileOtherName = fileName.substring(0, fileName.length() - num);//得到文件名。去掉了后缀
        return fileOtherName;
    }
    private String getDestPath(String name) {
        String fileType = getFileType(name);
src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java
@@ -96,4 +96,6 @@
     * @return
     */
    Result addTeachers(String teacherIds, String roleId);
}
src/main/java/com/qxueyou/scc/user/service/IUserService.java
@@ -117,4 +117,6 @@
     * @param userId
     */
    boolean exists(String account);
    Result countUser();
}
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java
@@ -172,4 +172,5 @@
        return dao.addTeachers(teacherIds, roleId);
    }
}
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java
@@ -282,4 +282,10 @@
        return findCount("from User where account = ?", CollectionUtils.newList(account)) > 0;
    }
    @Override
    public Result countUser() {
        String hql = "from count User where sex=? and deleteFlag is false";
        return new Result(true,findCount(hql,CollectionUtils.newList(1)));
    }
}
src/main/resources/application.properties
@@ -17,6 +17,7 @@
spring.http.multipart.maxFileSize=3000Mb
spring.http.multipart.maxRequestSize=3000Mb
#mysqldb.datasource.url=jdbc:mysql://rds88t2of1fi184y4s5wo.mysql.rds.aliyuncs.com:3306/scc?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
#mysqldb.datasource.url=jdbc:mysql://10.1.80.52:3306/rsdb?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull
mysqldb.datasource.url=jdbc:mysql://110.41.147.200:3306/scc?useUnicode=true&characterEncoding=GBK&characterSetResults=GBK&zeroDateTimeBehavior=convertToNull