qirong
2023-11-22 762167f3b4248055fc020277af1bd5724e29fec0
上传同步
6个文件已修改
185 ■■■■■ 已修改文件
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java
@@ -16,10 +16,21 @@
    //ossId
    private String ossId;
    //创建时间
    private Date createTime;
//    private Date createTime;
    //创建人
    private String createBy;
    //密码
    private String password;
    @Override
    public String toString() {
        return "SynchronousRequest{" +
            "file=" + file +
            ", path='" + path + '\'' +
            ", ossId='" + ossId + '\'' +
//            ", createTime=" + createTime +
            ", createBy='" + createBy + '\'' +
            ", password='" + password + '\'' +
            '}';
    }
}
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
@@ -80,7 +80,7 @@
    @SaCheckPermission("system:oss:upload")
    @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) {
    public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException {
        if (ObjectUtil.isNull(file)) {
            return R.fail("上传文件不能为空");
        }
@@ -127,7 +127,7 @@
    @DeleteMapping("/{ossIds}/{password}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ossIds,
                          @PathVariable String password) {
                          @PathVariable String password) throws Exception {
        return ossService.deleteWithValidByIds(List.of(ossIds), true,password) ? R.ok() : R.fail("提取码错误!");
    }
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java
@@ -25,6 +25,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Arrays;
/**
@@ -104,7 +105,7 @@
     */
    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
    @PostMapping(value = "/avatar", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) {
    public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) throws IOException {
        if (!avatarfile.isEmpty()) {
            String extension = FileUtil.extName(avatarfile.getOriginalFilename());
            if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) {
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
@@ -27,7 +27,7 @@
    SysOssVo getById(Long ossId);
    SysOssVo upload(MultipartFile file);
    SysOssVo upload(MultipartFile file) throws IOException;
    SysOssVo upload2(SynchronousRequest request);
@@ -35,7 +35,7 @@
    void download(Long ossId, HttpServletResponse response) throws IOException;
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password);
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) throws Exception;
    R viewPasswordById(Long ossId);
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -139,7 +139,7 @@
    }
    @Override
    public SysOssVo upload(MultipartFile file) {
    public SysOssVo upload(MultipartFile file) throws IOException {
        String originalfileName = file.getOriginalFilename();
        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
        OssClient storage = OssFactory.instance();
@@ -172,7 +172,7 @@
        }
        // 保存文件信息
        return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(),
            request.getPassword(), request.getCreateTime(), request.getCreateBy());
            request.getPassword(), request.getCreateBy());
    }
//    @Override
@@ -186,7 +186,7 @@
//    }
    @NotNull
    private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, MultipartFile file) {
    private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult, MultipartFile file) throws IOException {
        SysOss oss = new SysOss();
        oss.setUrl(uploadResult.getUrl());
        oss.setFileSuffix(suffix);
@@ -199,11 +199,11 @@
        SynchronousRequest request = new SynchronousRequest();
        request.setFile(file);
        request.setPath(uploadResult.getFilename() + "123");
        request.setCreateTime(oss.getCreateTime());
//        request.setCreateTime(new Date());
        request.setPassword(oss.getPassword());
        request.setCreateBy(String.valueOf(oss.getCreateBy()));
        request.setOssId(String.valueOf(oss.getOssId()));
//        post(request);
        post(request);
        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
        return this.matchingUrl(sysOssVo);
@@ -217,14 +217,14 @@
     * @param uploadResult
     * @param ossId
     * @param password
     * @param createTime
//     * @param createTime
     * @param createBy
     * @return
     */
    @NotNull
    private SysOssVo buildResultEntity2(String originalfileName, String suffix, String configKey,
                                        UploadResult uploadResult, String ossId, String password,
                                        Date createTime, String createBy) {
                                         String createBy) {
        SysOss oss = new SysOss();
        oss.setOssId(Long.valueOf(ossId));
        oss.setUrl(uploadResult.getUrl());
@@ -233,7 +233,7 @@
        oss.setOriginalName(originalfileName);
        oss.setService(configKey);
        oss.setPassword(password);
        oss.setCreateTime(createTime);
        oss.setCreateTime(new Date());
        oss.setCreateBy(Long.valueOf(createBy));
        baseMapper.insert(oss);
        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
@@ -241,7 +241,7 @@
    }
    @Override
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) {
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) throws Exception {
        if (isValid) {
            // 做一些业务上的校验,判断是否需要校验
        }
@@ -251,6 +251,7 @@
            storage.delete(sysOss.getUrl());
            if(sysOss.getPassword().equals(password)){
                baseMapper.deleteById(sysOss.getOssId());
                HttpUtils.sendDeleteRequest("http://192.168.3.43/resource/oss",String.valueOf(sysOss.getOssId()));
                return true;
            }
            return false;
@@ -286,7 +287,7 @@
        return oss;
    }
    private String post(SynchronousRequest request){
    private String post(SynchronousRequest request) throws IOException {
        HashMap<String, String> headers = new HashMap<>(3);
        String requestUrl = "http://192.168.3.43:8080/resource/oss/synchronization";
        ObjectMapper objectMapper = new ObjectMapper();
@@ -300,7 +301,7 @@
        }
        headers.put("content-type", "application/json");
        // 发送post请求
        String resultData = HttpUtils.sendPostWithJson(requestUrl, jsonString,headers);
        String resultData = HttpUtils.sendPostRequest(requestUrl, request);
        // 并接收返回结果
        System.out.println(resultData);
        return resultData;
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
@@ -4,7 +4,20 @@
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.dromara.common.oss.entity.SynchronousRequest;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
public class HttpUtils {
@@ -38,5 +51,130 @@
        }
        return jsonResult;
    }
    private static final String BOUNDARY = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
    private static final String LINE_FEED = "\r\n";
    private static final String CHARSET = "UTF-8";
    public static File convert(MultipartFile multipartFile) throws IOException {
        File file = new File(multipartFile.getOriginalFilename());
        multipartFile.transferTo(file);
        return file;
    }
    public static void sendPostRequest(String url, String stringParam, File fileParam) throws Exception {
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        // 设置POST请求
        con.setRequestMethod("POST");
        con.setDoOutput(true);
        con.setDoInput(true);
        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
        // 构建请求体
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes("--" + BOUNDARY + LINE_FEED);
        wr.writeBytes("Content-Disposition: form-data; name=\"stringParam\"" + LINE_FEED);
        wr.writeBytes(LINE_FEED);
        wr.writeBytes(stringParam + LINE_FEED);
        wr.writeBytes("--" + BOUNDARY + LINE_FEED);
        wr.writeBytes("Content-Disposition: form-data; name=\"fileParam\"; filename=\"" + fileParam.getName() + "\"" + LINE_FEED);
        wr.writeBytes("Content-Type: " + HttpURLConnection.guessContentTypeFromName(fileParam.getName()) + LINE_FEED);
        wr.writeBytes("Content-Transfer-Encoding: binary" + LINE_FEED);
        wr.writeBytes(LINE_FEED);
        FileInputStream inputStream = new FileInputStream(fileParam);
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            wr.write(buffer, 0, bytesRead);
        }
        wr.writeBytes(LINE_FEED);
        wr.writeBytes("--" + BOUNDARY + "--" + LINE_FEED);
        wr.flush();
        wr.close();
        // 发送请求并获取响应
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        // 打印响应结果
        System.out.println("Response Code : " + responseCode);
        System.out.println("Response : " + response.toString());
    }
    /**
     * 上传同步
     * @param url
     * @param entity
     * @return
     * @throws IOException
     */
    public static String sendPostRequest(String url, SynchronousRequest entity) throws IOException {
        org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(url);
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // 添加MultipartFile参数
        builder.addBinaryBody("file", entity.getFile().getBytes(), ContentType.MULTIPART_FORM_DATA, entity.getFile().getOriginalFilename());
        // 添加String参数
        builder.addTextBody("path", entity.getPath(), ContentType.TEXT_PLAIN);
        builder.addTextBody("ossId", entity.getOssId(), ContentType.TEXT_PLAIN);
        builder.addTextBody("createBy", entity.getCreateBy(), ContentType.TEXT_PLAIN);
        builder.addTextBody("password", entity.getPassword(), ContentType.TEXT_PLAIN);
        HttpEntity multipart = builder.build();
        httpPost.setEntity(multipart);
        HttpResponse response = httpClient.execute(httpPost);
        String responseBody = EntityUtils.toString(response.getEntity());
        System.out.println("Response: " + responseBody);
        return responseBody;
    }
    /**
     * 删除同步
     * @param url
     * @param parameter
     * @throws Exception
     */
    public static void sendDeleteRequest(String url, String parameter) throws Exception {
        // 拼接URL和参数
        String deleteUrl = url + "/" + parameter;
        // 创建URL对象和HttpURLConnection对象
        URL obj = new URL(deleteUrl);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        // 设置请求方法为DELETE
        con.setRequestMethod("DELETE");
        // 发送请求并获取响应
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        // 打印响应结果
        System.out.println("Response Code : " + responseCode);
        System.out.println("Response : " + response.toString());
    }
}