jersey文件上传

最近在搞webService的文件上传。服务器端好搞,就是客户端比较麻烦,mark一下。

服务端的代码:

@POST
@Path("uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_XML)
public String uploadFile(FormDataMultiPart form) {
    String filePath;
    String baseUrl = AppConfig.getProperty("res.root.path");
    try {
        UploadRule rule = new UploadRule(baseUrl,Constants.SPT + UploadRule.ACCESS_SCOPE_PROTECTED + SCOPE);
        //boay中可能有多个附件,循环出来
        List<BodyPart> v1 = form.getBodyParts();
        List<String> paths = new ArrayList<String>();
        for (BodyPart p : v1) {
            FormDataBodyPart vPart = (FormDataBodyPart) p;
            InputStream v = vPart.getValueAs(InputStream.class);
            String fileName = vPart.getName();
            File destDir = new File("d:/upload/files");
            if(!destDir.exists()) 
                destDir.mkdirs(); 
            OutputStream outputStream = new FileOutputStream(new File("d:/upload/files/"+fileName ));
            int length = 0;
            byte[] buff = new byte[1024];
            while (-1 != (length = v.read(buff))) {
                outputStream.write(buff, 0, length);
            }
            v.close();
            outputStream.close();
<pre name="code" class="html">            filePath = "d:/upload/files/"+fileName 
        }
        response.setPaths(paths);
        return filePath;
    } catch (Exception e) {
        e.printStackTrace();
        response.setResponseStatus(BaseResponse.RESPONSE_STATUS_ERROR);
        response.setResponseMessage(BaseUtil.getStackTrace(e));
        return filePath;  
 }
}


客户端代码:

public static void main(String[] args) {
		ClientConfig config = new DefaultClientConfig();
		Client client = Client.create(config);
		//上传的地址
		WebResource r = client.resource("http://jjy.cost168.com/api/upload/uploadFile");
		FormDataMultiPart form=new FormDataMultiPart();
			File f = new File("d:/x1.txt");
			InputStream file = null;
			try {
				file = new FileInputStream(f);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			FormDataBodyPart formDataBodyPart = new FormDataBodyPart();
			//这里指定上传时的类型
			formDataBodyPart.setValue(MediaType.MULTIPART_FORM_DATA_TYPE, file);
			formDataBodyPart.setName("x1.txt");
			form.getBodyParts().add(formDataBodyPart);//这样写的好处是可以上传多个附件
			//这里的type也要指定为data
			FilesResponse files = r.accept(MediaType.APPLICATION_XML).type(MediaType.MULTIPART_FORM_DATA).post(FilesResponse.class, form);
			for (String string : files.getPaths()) {
				System.out.println(string);
			}
	}
需要用到的jar

<dependency>
	<groupId>com.cost168.lib.bl</groupId>
	<artifactId>rest_core</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-core</artifactId>
	<version>1.17.1</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-client</artifactId>
	<version>1.17.1</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-json</artifactId>
	<version>1.17.1</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey.contribs</groupId>
	<artifactId>jersey-multipart</artifactId>
	<version>1.17.1</version>
</dependency>













郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。