我需要创建RestTemplate请求,它将通过PHP应用程序发送图像上传。
我的代码是:
Resource resource = new FileSystemResource("/Users/user/Documents/MG_0599.jpg");
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("Content-Type", "image/jpeg");
parts.add("file", resource);
parts.add("id_product", productId);
ResponseEntity<String> response = cookieRestTemplate.getForEntity(url, String.class, parts);
启动此应用程序后,PHP服务器向我发送信息,该文件为空。
我在想,这个问题是由PHP网站提供的,但是我已经为Firefox安装了POSTER插件,并且我在同一个网址上发出了GET请求,但是要上传的文件,我选择了像web格式一样的规范(弹出系统窗口选择文件)。 在此PHP程序上传文件后没有任何问题。
我认为,问题可能在于,我将资源作为param名称的值发送:
parts.add("file", resource);
在POSTER插件上,我只是从文件系统中选择文件?
你能帮助我吗?
答案 0 :(得分:8)
您没有正确使用RestTemplate
。您正在使用以下方法
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> urlVariables)
所以你看到你的MultiValueMap
将被用作你实际上似乎没有的URL变量的来源。请求中没有发送请求参数。
您实际上无法使用任何getForX
方法上传文件。
您必须使用exchange
方法之一。例如
Resource resource = new FileSystemResource(
"/Users/user/Documents/MG_0599.jpg");
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("Content-Type", "image/jpeg");
parts.add("file", resource);
parts.add("id_product", productId);
restTemplate.exchange(url, HttpMethod.GET,
new HttpEntity<MultiValueMap<String, Object>>(parts),
String.class); // make sure to use the generic type argument
请注意,使用GET
请求进行文件上传非常罕见。