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()); } }