Refactor PrestashopClient to construct absolute URL for image uploads and improve logging
This commit is contained in:
@@ -15,6 +15,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
|
|
||||||
@@ -240,20 +241,22 @@ public class PrestashopClient {
|
|||||||
MultipartFile imageFile
|
MultipartFile imageFile
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
// construction de l'URL relative (le RestClient a déjà baseUrl)
|
// On construit l'URL complète (absolue)
|
||||||
StringBuilder pathBuilder = new StringBuilder("/images/products/")
|
StringBuilder urlBuilder = new StringBuilder(baseUrl)
|
||||||
|
.append("/images/products/")
|
||||||
.append(productId);
|
.append(productId);
|
||||||
|
|
||||||
if (rawQuery != null && !rawQuery.isBlank()) {
|
if (rawQuery != null && !rawQuery.isBlank()) {
|
||||||
pathBuilder.append('?').append(rawQuery);
|
urlBuilder.append('?').append(rawQuery);
|
||||||
}
|
}
|
||||||
String path = pathBuilder.toString();
|
|
||||||
|
String url = urlBuilder.toString();
|
||||||
|
|
||||||
byte[] bytes = imageFile.getBytes();
|
byte[] bytes = imageFile.getBytes();
|
||||||
|
|
||||||
log.info("[PrestaShop] POST (image multipart) {} (size={} bytes, contentType={})",
|
log.info("[PrestaShop] POST (image multipart) {} (size={} bytes, contentType={})",
|
||||||
baseUrl + path, bytes.length, imageFile.getContentType());
|
url, bytes.length, imageFile.getContentType());
|
||||||
|
|
||||||
// Ressource avec un filename pour que Spring pose bien le Content-Disposition
|
|
||||||
ByteArrayResource fileResource = new ByteArrayResource(bytes) {
|
ByteArrayResource fileResource = new ByteArrayResource(bytes) {
|
||||||
@Override
|
@Override
|
||||||
public String getFilename() {
|
public String getFilename() {
|
||||||
@@ -262,13 +265,12 @@ public class PrestashopClient {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// corps multipart : clé -> "image"
|
|
||||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||||
|
// *** clé "image" obligatoire pour Presta ***
|
||||||
body.add("image", fileResource);
|
body.add("image", fileResource);
|
||||||
|
|
||||||
// Envoi de la requête multipart/form-data
|
|
||||||
return client.post()
|
return client.post()
|
||||||
.uri(path)
|
.uri(URI.create(url)) // <-- URL absolue, plus de scheme undefined
|
||||||
.contentType(MediaType.MULTIPART_FORM_DATA)
|
.contentType(MediaType.MULTIPART_FORM_DATA)
|
||||||
.body(body)
|
.body(body)
|
||||||
.retrieve()
|
.retrieve()
|
||||||
|
|||||||
Reference in New Issue
Block a user