fix: return absolute upload file urls

main
chenyuan 4 weeks ago
parent bae1c7b13c
commit 63d82cfe81

@ -1,6 +1,7 @@
package com.sztzjy.linkCommerce.controller.common; package com.sztzjy.linkCommerce.controller.common;
import com.sztzjy.linkCommerce.util.file.IFileUtil; import com.sztzjy.linkCommerce.util.file.IFileUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RequestPart;
@ -17,6 +18,9 @@ public class CommonUploadController {
@Resource @Resource
private IFileUtil fileUtil; private IFileUtil fileUtil;
@Value("${file.url}")
private String fileUrl;
@PostMapping("/upload") @PostMapping("/upload")
public Map<String, Object> upload(@RequestPart("file") MultipartFile file) { public Map<String, Object> upload(@RequestPart("file") MultipartFile file) {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
@ -27,7 +31,7 @@ public class CommonUploadController {
} }
String filePath = fileUtil.upload(file); String filePath = fileUtil.upload(file);
String publicPath = "/file" + filePath; String publicPath = publicFileUrl(filePath);
result.put("code", 200); result.put("code", 200);
result.put("msg", "上传成功"); result.put("msg", "上传成功");
result.put("fileName", publicPath); result.put("fileName", publicPath);
@ -35,4 +39,13 @@ public class CommonUploadController {
result.put("originalFilename", file.getOriginalFilename()); result.put("originalFilename", file.getOriginalFilename());
return result; return result;
} }
private String publicFileUrl(String filePath) {
String baseUrl = fileUrl == null ? "" : fileUrl.trim();
while (baseUrl.endsWith("/")) {
baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
}
String relativePath = filePath == null ? "" : filePath.trim();
return baseUrl + (relativePath.startsWith("/") ? relativePath : "/" + relativePath);
}
} }

@ -21,7 +21,7 @@ spring:
file: file:
type: local type: local
path: E:/workspace/dianshang/link_commerce/uploadFile path: E:/workspace/dianshang/link_commerce/uploadFile
url: "http://localhost:7548/file" url: ${FILE_URL:http://localhost:7548/file}
#path: D:/tianzeProject/linkCommerce/ #path: D:/tianzeProject/linkCommerce/
#url: "http://192.168.2.8:147/file" #url: "http://192.168.2.8:147/file"

@ -0,0 +1,40 @@
package com.sztzjy.linkCommerce.controller.common;
import com.sztzjy.linkCommerce.util.file.IFileUtil;
import org.junit.jupiter.api.Test;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.multipart.MultipartFile;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
class CommonUploadControllerTest {
@Test
void uploadReturnsAbsoluteConfiguredFileUrl() {
IFileUtil fileUtil = mock(IFileUtil.class);
when(fileUtil.upload(any(MultipartFile.class))).thenReturn("/2026/8/1/example.docx");
CommonUploadController controller = new CommonUploadController();
ReflectionTestUtils.setField(controller, "fileUtil", fileUtil);
ReflectionTestUtils.setField(controller, "fileUrl", "https://files.example.com/file/");
MockMultipartFile file = new MockMultipartFile(
"file",
"case.docx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"case".getBytes(StandardCharsets.UTF_8)
);
Map<String, Object> result = controller.upload(file);
assertEquals("https://files.example.com/file/2026/8/1/example.docx", result.get("url"));
assertEquals(result.get("url"), result.get("fileName"));
assertEquals("case.docx", result.get("originalFilename"));
}
}
Loading…
Cancel
Save