当前位置: 代码迷 >> 综合 >> resteasy 上传文件
  详细解决方案

resteasy 上传文件

热度:1   发布时间:2023-12-09 19:04:50.0

现在使用jboss的resteasy 做一个rest接口,用于接收上传的文件。

先前是类似这么用的:

 

    @POST@Path("/uploadfile")@Consumes("multipart/form-data")public Response uploadFile(@Context HttpServletRequest request) {File f = new File("c:\\XXXXX.exe");InputStream is = null;try {is = request.getInputStream();FileUtils.copyInputStreamToFile(is, f);} catch (IOException e) {<span style="white-space:pre">		</span>e.printStackTrace();}return Response.ok().build();}

发现上传后文件被破坏掉了,图片打不开、执行文件无法执行。这个不知道为什么?有朋友知道可以告诉一下。


后来上网搜了下,就改用了MultipartFormDataInput方式,结果就OK了:


用法大概如下:

    @POST@Path("/upload")@Consumes("multipart/form-data")public Object uploadfile(MultipartFormDataInput input) {Map<String, Object> map = null;Map<String, List<InputPart>> uploadForm = input.getFormDataMap();//取得文件表单名List<InputPart> inputParts = uploadForm.get("kfile");for (InputPart inputPart : inputParts) {try {InputStream inputStream = inputPart.getBody(InputStream.class,null);//TODO 把文件流保存;} catch (IOException e) {e.printStackTrace();}}return Response.ok().build();
}


以此为记。

===============

后记

以上两种方式的差异跟HTTP协议有关

使用request.getInputStream()的话是获取整个POST BODY内容,但这个BODY内容可能包含参数与文件信息,这里就不等于上传的文件了。

使用MultipartFormDataInput的话,可以从POST BODY分离出参数和文件对象,所以可以通过uploadForm.get("kfile")的方式获取指定文件对象。