有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用POST将图像上传到服务器

我知道网站上有一些与此类似的问题,我已经阅读了其中的大部分。我也在谷歌上搜索解决方案,但仍有问题

因此,在我的项目中,我需要捕获用于从客户端发送混合数据(一个图像、两个字符串(公司、类型)、日期数据(月份、年份)和几个整数)的多部分post请求。收到此请求后,我需要更改图像的对比度和亮度,并将颜色修改为灰色

为了进行调试,我使用了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默认情况下可以读取,选中它),但得到了相同的结果。正如我所想,这是因为在我的输入流中有一些“不必要的”信息,所以imageio。read()无法将其转换为任何类型的图像。当将InputStream更改为文件时,我突然发现:

@FormDataParam("image") File imageInputStream

。。。然后检查tomcat保存的文件。tmp文件。看起来是这样的:

------WebKitFormBoundary4nC1XD4cevbbRh7A

Content-Disposition: form-data; name="image"; filename="1.jpg">

Content-Type: image/jpeg

(a lot of bytes)

------WebKitFormBoundary4nC1XD4cevbbRh7A--

当然还有imageio。read()返回了null

综上所述,我有两个问题:

  1. 我为什么会出现404错误?我该如何修复它?例如,我尝试了this和类似的here。我必须从here中删除第二个@FormDataParam,才能至少收到一些东西。这可能是邮递员“特定”表单数据请求的原因吗
  2. 为什么我得到了错误的数据?也许我可以解析接收到的文件并得到“正确”的字节数组?还是别的什么

共 (0) 个答案