如何让Android REST客户端将视频/图像发布到Jersey Web服务?

时间:2016-03-01 07:01:26

标签: android web-services rest jersey multipartform-data

我在泽西岛有一个功能性的网络服务,它使用视频和图像等多部分表单数据并将它们存储在目录中。我可以从浏览器上传视频和图像。现在我想通过选择图库Intent或相机从Android应用程序上传它们。 我该怎么办? 任何帮助将不胜感激。这是我的网络服务代码。

@Path("/fileupload")
public class UploadFileService {

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public String uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) {

        try {

            String uploadedFileLocation = "/home/aamir/Downloads/" + fileDetail.getFileName();

            // save it
            saveToFile(uploadedInputStream, uploadedFileLocation);

            String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation;

            return output;
        }

        catch(Exception e)
        {
            return "error";
        }

    }

    // save uploaded file to new location
    private void saveToFile(InputStream uploadedInputStream,
        String uploadedFileLocation) {

        try {
            OutputStream out = null;
            int read = 0;
            byte[] bytes = new byte[1024];

            out = new FileOutputStream(new File(uploadedFileLocation));
            while ((read = uploadedInputStream.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }
            out.flush();
            out.close();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我建议您使用Retrofit下载图像。它是处理RESTful应用程序的绝佳库:

Use retrofit to download image file

答案 1 :(得分:0)

您可以在Android应用中使用Jersey客户端API(或任何其他客户端API,Apache CXF会让人想起......)。它位于一个独立的jar中,您可以将其作为依赖项添加到您的应用程序中,然后在您的应用程序中创建一个用于创建请求的共享客户端。

来自Jersey客户端文档...

Client client = ClientBuilder.newClient();
WebTarget target =  client.target("http://localhost:9998").path("resource");

Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");

MyJAXBBean bean =
    target.request(MediaType.APPLICATION_JSON_TYPE)
            .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
                  MyJAXBBean.class);

https://jersey.java.net/documentation/latest/client.html