jiangping
2025-06-25 60acccaebef503315c852f31677b44eb3fd40a4f
提交一把订单
已添加2个文件
已删除6个文件
已修改2个文件
已重命名3个文件
1140 ■■■■ 文件已修改
company/src/components/common/upload.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/company/src/main/java/com/doumee/api/BaseController.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/BaseController.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/common/CaptchaController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/common/PublicController.java 384 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/api/BaseController.java 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/api/common/CaptchaController.java 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/api/common/PublicController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/aliyun/ProgressModel.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/aliyun/PutObjectProgressListenerBiz.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/common/CaptchaController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/common/PublicController.java 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/common/upload.vue
@@ -73,13 +73,13 @@
          }
        }
        // const loading = this.$loading({
        //       lock: true,
        //       text: '上传中,请等待',
        //       spinner: 'el-icon-loading',
        //       background: 'rgba(0, 0, 0, 0.7)'
        //   });
        // this.$emit('loading')
        const loading = this.$loading({
              lock: true,
              text: '上传中,请等待',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
          });
        this.$emit('loading')
        const formdate = new FormData()
        formdate.append('file', e.target.files[0])
        formdate.append('folder', this.folder)
@@ -91,7 +91,7 @@
            this.$message.error(e)
          })
          .finally(() => {
            // loading.close();
            loading.close();
            this.$refs.file.value = null
          })
      }
server/company/src/main/java/com/doumee/api/BaseController.java
ÎļþÒÑɾ³ý
server/platform/src/main/java/com/doumee/api/BaseController.java
ÎļþÒÑɾ³ý
server/platform/src/main/java/com/doumee/api/common/CaptchaController.java
ÎļþÒÑɾ³ý
server/platform/src/main/java/com/doumee/api/common/PublicController.java
ÎļþÒÑɾ³ý
server/service/src/main/java/com/doumee/api/BaseController.java
server/service/src/main/java/com/doumee/api/common/CaptchaController.java
server/service/src/main/java/com/doumee/api/common/PublicController.java
ÎļþÃû´Ó server/company/src/main/java/com/doumee/api/common/PublicController.java ÐÞ¸Ä
@@ -3,22 +3,21 @@
import com.alibaba.fastjson.JSONObject;
import com.doumee.api.BaseController;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.annotation.excel.ExcelToPdfTool;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.aliyun.ALiYunUtil;
import com.doumee.core.utils.aliyun.ProgressModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@@ -53,21 +52,22 @@
        @ApiImplicitParam(name = "folder", value = "文件夹", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
    })
    @PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
    public void uploadMobile(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
    public void uploadMobile(String folder, String uuid,HttpServletRequest request, HttpServletResponse response) throws Exception {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        upload(multipartRequest, response, folder + "/",
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.BUCKETNAME).getCode(),
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
            systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode(),
            uuid);
    }
    @ApiOperation(value = "上传图片", notes = "上传图片", httpMethod = "POST", position = 6)
    @ApiImplicitParams({
            @ApiImplicitParam(name = "folder", value = "文件夹", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
    })
    @PostMapping(value = "/uploadPicture", headers = "content-type=multipart/form-data")
    public void uploadPicture(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
    public void uploadPicture(String folder,String uuid, HttpServletRequest request, HttpServletResponse response) throws Exception {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Iterator<String> fileNames = multipartRequest.getFileNames();
        Map<String, Object> context = new HashMap<>();
@@ -86,11 +86,16 @@
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_ID).getCode(),
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ACCESS_KEY).getCode(),
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode(),
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode());
                systemDictDataBiz.queryByCode(Constants.OSS,Constants.ENDPOINT).getCode(),
                uuid);
    }
    @ApiOperation("根据uuid查询上传进度")
    @GetMapping("/{uuid}")
    public ApiResponse<ProgressModel> findById(@PathVariable String uuid) {
        return ApiResponse.success(ALiYunUtil.queryProgressModel(uuid));
    }
    public void upload(HttpServletRequest request, HttpServletResponse response, String folder, String bucketName,
        String access_id, String access_key, String resourcePath, String endpoint) throws Exception {
        String access_id, String access_key, String resourcePath, String endpoint,String uuid) throws Exception {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        Map<String, Object> context = new HashMap<>();
@@ -139,7 +144,7 @@
                            || StringUtils.endsWith(key,".JPEG")){
                        type =0;
                    }
                    if (obs.uploadOnlineObject(file.getInputStream(),bucketName, key,null)) {
                    if (obs.uploadOnlineObject(file.getInputStream(),bucketName, key,uuid,null)) {
                        // ç§»åŠ¨æˆåŠŸ,返回文件名
                        // sendSuccessMessage(response, resourcePath+key);
                        context.put("success", true);
server/service/src/main/java/com/doumee/core/utils/aliyun/ALiYunUtil.java
@@ -5,6 +5,9 @@
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.event.ProgressEvent;
import com.aliyun.oss.event.ProgressEventType;
import com.aliyun.oss.event.ProgressListener;
import com.aliyun.oss.model.*;
import com.aliyun.sdk.service.cloudauth20190307.AsyncClient;
import com.aliyun.sdk.service.cloudauth20190307.models.Id2MetaVerifyRequest;
@@ -17,6 +20,7 @@
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
@@ -520,7 +524,7 @@
    }
    public boolean uploadOnlineObject(InputStream inputStream, String bucketName, String key,
    public boolean uploadOnlineObjectNew(InputStream inputStream, String bucketName, String key,
                                      String mime) throws OSSException, ClientException, IOException {
        if (inputStream != null) {
            // åˆ¤æ–­æ˜¯å¦å­˜åœ¨ï¼Œä¸å­˜åœ¨åˆ›å»º
@@ -564,7 +568,63 @@
        return false;
    }
    public static ProgressModel queryProgressModel(String id){
        return PutObjectProgressListenerBiz.queryProgressModel(id);
    }
    public boolean uploadOnlineObject(InputStream inputStream, String bucketName, String key,String tempId,
                                      String mime) throws OSSException, ClientException, IOException {
        try {
            isExistBucket(bucketName);
            ObjectMetadata objectMeta = new ObjectMetadata();
            objectMeta.setContentLength(inputStream.available());
            // å¯ä»¥åœ¨metadata中标记文件类型
            if (StringUtils.isNotBlank(mime)) {
                objectMeta.setContentType(mime);
            }
            PutObjectRequest putObjectRequest = null;
            if(StringUtils.isNotBlank(tempId)){
                ProgressModel pmodel = new ProgressModel();
                pmodel.setKey(key);
                pmodel.setId(tempId);
                pmodel.setStartDate(new Date());
                putObjectRequest = new PutObjectRequest(bucketName, key,
                        inputStream).withProgressListener(new PutObjectProgressListenerBiz(pmodel));
            }else{
                putObjectRequest = new PutObjectRequest(bucketName, key,
                        inputStream);
            }
            PutObjectResult putObjectResult = client.putObject(putObjectRequest);
            // ä¸‹è½½æ–‡ä»¶çš„同时指定进度条参数。此处GetObjectProgressListenerDemo为调用类的类名,请在实际使用时替换为相应的类名。
//            ossClient.getObject(new GetObjectRequest(bucketName,objectName).
//                    <GetObjectRequest>withProgressListener(new GetObjectProgressListenerDemo()));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (inputStream != null) {
                // åˆ¤æ–­æ˜¯å¦å­˜åœ¨ï¼Œä¸å­˜åœ¨åˆ›å»º
                inputStream.close();
            }
            if (client != null) {
                client.shutdown();
            }
        }
        return false;
    }
server/service/src/main/java/com/doumee/core/utils/aliyun/ProgressModel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.doumee.core.utils.aliyun;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class ProgressModel {
    private String id;
    private String key;
    private long totalBytes;//总大小
    private long bytesWritten;//已传数据
    private double rate;//上传进度%
    private  int status ;//状态 0待上传 1上传中 2成功 3失败
    private Date doneDate;
    private Date startDate;
}
server/service/src/main/java/com/doumee/core/utils/aliyun/PutObjectProgressListenerBiz.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.doumee.core.utils.aliyun;
import com.aliyun.oss.event.ProgressEvent;
import com.aliyun.oss.event.ProgressEventType;
import com.aliyun.oss.event.ProgressListener;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class PutObjectProgressListenerBiz implements ProgressListener {
    private static List<ProgressModel> currentUploadingList = new ArrayList<>();
    private ProgressModel model;
    public  PutObjectProgressListenerBiz(ProgressModel model){
        currentUploadingList.add(model);
        this.model = model;
    }
    public static ProgressModel queryProgressModel(String id){
        ProgressModel r = null;
        if(currentUploadingList!=null && currentUploadingList.size()>0){
            List<ProgressModel> tlist = new ArrayList<>();
            for(ProgressModel m : currentUploadingList){
                if(StringUtils.equals(id,m.getId())){
                 r = m;
                }
                if(System.currentTimeMillis() - m .getStartDate().getTime() > 24*60*60*1000){
                    //删除超过1天的数据
                    tlist.add(m);
                }
            }
            if(tlist.size()>0){
                //移除一天前的数据
                for(ProgressModel t : tlist){
                    currentUploadingList.remove(t);
                }
            }
        }
        return r;
    }
    @Override
    public void progressChanged(ProgressEvent progressEvent) {
        long bytes = progressEvent.getBytes();
        ProgressEventType eventType = progressEvent.getEventType();
        switch (eventType) {
            case TRANSFER_STARTED_EVENT:
                this.model.setDoneDate(new Date());
                System.out.println("Start to upload......");
                break;
            case REQUEST_CONTENT_LENGTH_EVENT:
                this.model.setTotalBytes(bytes);
                System.out.println( this.model.getTotalBytes() + " bytes in total will be uploaded to OSS");
                break;
            case REQUEST_BYTE_TRANSFER_EVENT:
                this.model.setStatus(1);
                this.model.setBytesWritten(this.getModel().getBytesWritten()+bytes);
                if (this.model.getTotalBytes() >0) {
                    int percent = (int)(this.getModel().getBytesWritten() * 100.0 / this.model.getTotalBytes());
                    this.model.setBytesWritten(this.getModel().getBytesWritten()+bytes);
                    System.out.println(bytes + " bytes have been written at this time, upload progress: " + percent + "%(" + this.getModel().getBytesWritten() + "/" + this.model.getTotalBytes()+ ")");
                } else {
                    System.out.println(bytes + " bytes have been written at this time, upload ratio: unknown" + "(" + this.model.getBytesWritten() + "/...)");
                }
                break;
            case TRANSFER_COMPLETED_EVENT:
                this.model.setStatus(2);
                this.model.setDoneDate(new Date());
                System.out.println("Succeed to upload, " +  this.getModel().getBytesWritten()  + " bytes have been transferred in total");
                break;
            case TRANSFER_FAILED_EVENT:
                this.model.setStatus(3);
                this.model.setDoneDate(new Date());
                System.out.println("Failed to upload, " +  this.getModel().getBytesWritten()  + " bytes have been transferred");
                break;
            default:
                break;
        }
    }
}
server/shop/src/main/java/com/doumee/api/common/CaptchaController.java
ÎļþÒÑɾ³ý
server/shop/src/main/java/com/doumee/api/common/PublicController.java
ÎļþÒÑɾ³ý