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>













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章