2010-04-14 77 views
23

(特别RestEasy的)如何使用jax-rs做多部分/表单文件上传?

这将是很好(单个文件)有类似的方法签名:

public void upload(@FormParam("name") ..., @FormParam("file") file: InputStream) 
... 

可行?还是我在做梦?似乎并不那么简单。

+0

迈克尔,你是怎么使用测试这项服务?我无法弄清楚如何设置请求... – c12 2011-04-20 23:32:00

回答

26

关键是利用RESTEasy附带的@MultipartForm注释。这使您可以定义一个POJO,它包含表单的所有部分并轻松绑定它。

就拿以下POJO:

public class FileUploadForm { 
    private byte[] filedata; 

    public FileUploadForm() {} 

    public byte[] getFileData() { 
     return filedata; 
    } 

    @FormParam("filedata") 
    @PartType("application/octet-stream") 
    public void setFileData(final byte[] filedata) { 
     this.filedata = filedata; 
    } 
} 

现在,所有你需要做的就是用这个POJO的实体这将是这个样子:

@POST 
@Path("/upload") 
@Consumes("multipart/form-data") 
public Response create(@MultipartForm FileUploadForm form) 
{ 
    // Do something with your filedata here 
} 
+1

raiglstorfer,你将如何设置测试此服务的请求? – c12 2011-04-20 23:31:19

+1

@ c12我使用cURL来测试我的RESTeasy方法。像这样的东西应该工作:'curl -F [email protected] http:// localhost:8080/Project/rest-servlet/upload',更多信息在这里:[link](http://curl.haxx.se /) – 2011-06-23 10:14:01

相关问题