我知道网站上有一些与此类似的问题,并且我已经阅读了其中的大部分。我也用谷歌搜索了一个解决方案,但仍然有问题。
因此,在我的项目中,我需要捕获用于从客户端发送混合数据(图像、两个字符串(公司、类型)、日期数据(月、年)和一些整数)的多部分发布请求。收到此请求后,我需要更改图像的对比度和亮度,并将颜色修改为灰色调。
对于调试,我使用 Postman Chrome 扩展程序,现在我只专注于发送图像。我已经测试了以不同方式发送请求,其中一半我收到“404 Not Found”错误,另一半返回错误数据(主要是 0 数组)。以下是我的资源方法中使用的代码:
@Component
@Path("/code")
@Produces("application/json")
public class EncodeResource extends BasicResource {
@POST
@Path("/encode")
@Consumes("multipart/form-data")
public String encodeImage(
@FormDataParam("image") InputStream imageInputStream) {
BufferedImage imageBuffer = null;
try {
imageBuffer = ImageIO.read(imageInputStream);
} catch (IOException e) {
e.printStackTrace();
}
if (imageBuffer != null)
return okResponse(<some parameters>);
else
return errorResponse(<some parameters>);
}
}
ImageInputStream 包含一些字节数组,但 ImageIO.read() 总是返回null。我尝试了具有不同扩展名的不同图像(默认情况下 imageio 可以读取,检查它),但得到了相同的结果。我认为,这是因为我的 inputStream 中有一些“不必要的”信息,因此 imageio.read() 无法将其转换为任何类型的图像。我突然发现它,当将 InputStream 更改为 File 时:
@FormDataParam("image") File imageInputStream
...然后检查由tomcat .tmp 文件保存。它看起来像这样:
------WebKitFormBoundary4nC1XD4cevbbRh7A
内容处置:表单数据;名称=“图像”;文件名="1.jpg">
内容类型:图片/jpeg
(很多字节)
------WebKitFormBoundary4nC1XD4cevbbRh7A--
当然 imageio.read() 返回了null。
总结所有这些,我实际上有两个问题: