resteasy 上传文件

5 篇文章 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")的方式获取指定文件对象。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值