fix: 禅道同步图片失败

--bug=1013432 --user=陈建星 [缺陷管理] github#13685通过metersphere平台创建缺陷,同步至禅道缺陷之后,meterphere点击【同步缺陷】,禅道缺陷同步失败 https://www.tapd.cn/55049933/s/1165437
This commit is contained in:
chenjianxing 2022-05-26 17:56:25 +08:00 committed by jianxing
parent 5ddeb98efa
commit ea54bfe739
3 changed files with 28 additions and 0 deletions

View File

@ -25,6 +25,11 @@ public class ResourceController {
return resourceService.getMdImage(fileName); return resourceService.getMdImage(fileName);
} }
@GetMapping(value = "/md/get/url")
public ResponseEntity<byte[]> getFileByUrl(@RequestParam ("url") String url) {
return resourceService.getMdImageByUrl(url);
}
@GetMapping(value = "/ui/get") @GetMapping(value = "/ui/get")
public ResponseEntity<FileSystemResource> getUiFile(@RequestParam ("fileName") String fileName) { public ResponseEntity<FileSystemResource> getUiFile(@RequestParam ("fileName") String fileName) {
return resourceService.getUiResultImage(fileName); return resourceService.getUiResultImage(fileName);

View File

@ -7,12 +7,15 @@ import io.metersphere.controller.request.MdUploadRequest;
import io.metersphere.i18n.Translator; import io.metersphere.i18n.Translator;
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File; import java.io.File;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLDecoder; import java.net.URLDecoder;
@ -23,6 +26,9 @@ import java.util.Date;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class ResourceService { public class ResourceService {
@Resource
private RestTemplate restTemplate;
public void mdUpload(MdUploadRequest request, MultipartFile file) { public void mdUpload(MdUploadRequest request, MultipartFile file) {
FileUtils.uploadFile(file, FileUtils.MD_IMAGE_DIR, request.getId() + "_" + request.getFileName()); FileUtils.uploadFile(file, FileUtils.MD_IMAGE_DIR, request.getId() + "_" + request.getFileName());
} }
@ -82,4 +88,18 @@ public class ResourceService {
} }
FileUtils.deleteFile(FileUtils.MD_IMAGE_DIR + "/" + fileName); FileUtils.deleteFile(FileUtils.MD_IMAGE_DIR + "/" + fileName);
} }
/**
* http 代理
* 如果当前访问地址是 https直接访问 http 的图片资源
* 由于浏览器的安全机制http 会被转成 https
* @param url
* @return
*/
public ResponseEntity<byte[]> getMdImageByUrl(String url) {
if (url.contains("md/get/url")) {
MSException.throwException(Translator.get("invalid_parameter"));
}
return restTemplate.exchange(url, HttpMethod.GET, null, byte[].class);
}
} }

View File

@ -35,6 +35,8 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -460,6 +462,7 @@ public class ZentaoPlatform extends AbstractIssuePlatform {
name = name.replaceAll("&amp;", "&"); name = name.replaceAll("&amp;", "&");
path = zentaoClient.getBaseUrl() + path.replaceAll("&amp;", "&"); path = zentaoClient.getBaseUrl() + path.replaceAll("&amp;", "&");
} }
path = "/resource/md/get/url?url=" + URLEncoder.encode(path, StandardCharsets.UTF_8);
// 图片与描述信息之间需换行否则无法预览图片 // 图片与描述信息之间需换行否则无法预览图片
result = "\n\n![" + name + "](" + path + ")"; result = "\n\n![" + name + "](" + path + ")";
} }