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

时间:2013-04-02 17:03:38

标签: java post jax-rs multipartform-data

我知道网站上有一些类似的问题,我已经阅读了大部分内容。我也用Google搜索了一个解决方案,但我仍然遇到问题。

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

为了进行调试,我使用Postman Chrome Extension,目前我只专注于发送图像。我已经测试过以不同方式发送请求,其中一半我得到“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

     

内容 - 处置:表单数据; NAME = “图像”;文件名= “1.JPG” &GT;

     

内容类型:image / jpeg

     

(很多字节)

     

------ WebKitFormBoundary4nC1XD4cevbbRh7A -

当然,imageio.read()返回 null

总结所有这些,我实际上有两个问题:

  1. 为什么我会收到404错误,我该如何解决?例如,我尝试this并尝试here。我不得不从here删除第二个@FormDataParam以至少收到一些东西。这可能是邮递员“特定”表格 - 数据请求的原因吗?
  2. 为什么我收到了错误的数据?也许我可以解析收到的文件并获得“正确”的字节数组?或其他什么?..

0 个答案:

没有答案
相关问题