gpt4 book ai didi

java - RestTemplate 上传图片文件

转载 作者:行者123 更新时间:2023-12-03 21:43:12 26 4
gpt4 key购买 nike

我需要创建 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 插件,并且我在同一个 URL 上发出了 GET 请求,但是要上传的文件,我已经选择了正常的 web 表单(弹出系统窗口选择文件)。这个PHP程序上传文件后没有任何问题。

我认为,问题可能在于这个,我将资源作为参数名称的值发送:

parts.add("file", resource);

在 POSTER 插件上,我只是从我的文件系统中选择文件?

你能帮帮我吗?

最佳答案

您没有正确使用 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 请求进行文件上传是非常罕见的。

关于java - RestTemplate 上传图片文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21102071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com