我有一个图像上传到 S3 存储桶,我想通过 Cloudflare (CDN) 访问该图像。当我尝试通过在浏览器中输入 URL 或使用 Postman 来查看图像时,我可以毫无问题地看到图像。
但是,当我尝试在 Spring Boot 应用程序中使用 Java 获取它时,遇到 403 错误。
我尝试了 3 种获取图像的方法
1.
Image.getInstance(imageUrl)
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
HttpEntity<String> entity = new HttpEntity<>(headers);
byte[] imageData = restTemplate.exchange(imageUrl, HttpMethod.GET, entity, byte[].class).getBody();
URL url = new URL(logoPath);
URLConnection connection = url.openConnection();
InputStream inputStream = connection.getInputStream();
FileOutputStream outputStream = new FileOutputStream("image.png");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.close();
在方法 1 和 3 中,我收到 401(Forbidden) 。 在方法 2 中,得到 301
我可以做什么来解决这个问题?
我想获取此图像直接在文件中使用。
我通过在创建连接或标头时添加“用户代理”解决了此错误。
我还尝试添加多个用户代理,但它对我不起作用。 尝试只添加一个用户代理。
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("User-Agent", "Mozilla/5.0 ");
HttpEntity<String> entity = new HttpEntity<>(headers);
byte[] imageData = restTemplate.exchange(imageUrl, HttpMethod.GET, entity, byte[].class).getBody();