如何使用Jersey Web服务发布多个文件(图像)。

时间:2012-08-13 06:46:06

标签: java web-services rest jersey

您好我是Restful网络服务的新手。

我的目标是在一个请求中创建多个用户帐户。

我选择Jersey API来创建一个Web服务。

此WS将创建多个用户的帐户。每个用户帐户都与头像(个人资料图片)相关联。我使用头像发送用户信息(使用Base64编码器将头像文件编码为字符串格式)。

我的问题是,如果请求有多个用户,并且每个用户都与更大的头像大小相关联,那么Restful Web服务是否可以处理这些请求?

Restful webservice中的Request数据大小是否有限?

请建议我在Jersey API中创建更好的网络服务。

2 个答案:

答案 0 :(得分:4)

您应该查看Jersey Multipart support - 而不是在邮件正文中传递头像 - 它将允许您将大型文件传输到您的其余服务。另一个好处 - 你不再需要Base64编码了。

答案 1 :(得分:2)

我可以通过表单提交来实现这一点,而不是以JSON格式准备对象。

@Path("/upload")
public class MultipleFiles
{
    private static final String FILE_UPLOAD_PATH = "/Users/arun_kumar/Pictures";
    private static final String CANDIDATE_NAME = "candidateName";
    private static final String SUCCESS_RESPONSE = "Successful";
    private static final String FAILED_RESPONSE = "Failed";

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces("text/plain")
    @Path("/multipleFiles")
    public String registerWebService(@Context HttpServletRequest request)
    {
        String responseStatus = SUCCESS_RESPONSE;        
        String candidateName = null;

        //checks whether there is a file upload request or not
        if (ServletFileUpload.isMultipartContent(request))
        {
            final FileItemFactory factory = new DiskFileItemFactory();
            final ServletFileUpload fileUpload = new ServletFileUpload(factory);
            try
            {
                /*
                 * parseRequest returns a list of FileItem
                 * but in old (pre-java5) style
                 */
                final List items = fileUpload.parseRequest(request);

                if (items != null)
                {
                    final Iterator iter = items.iterator();

                    while (iter.hasNext())
                    {
                        final FileItem item = (FileItem) iter.next();
                        final String itemName = item.getName();
                        final String fieldName = item.getFieldName(); 
                        final String fieldValue = item.getString();

                        if (item.isFormField())
                        {
                            candidateName = fieldValue;
                            System.out.println(" Name: " + fieldName + ", Value: " + fieldValue);
                        }
                        else
                        {
                                final File savedFile = new File(FILE_UPLOAD_PATH + File.separator
                                         + itemName);
                                System.out.println(" Saving the file: " + savedFile.getName());
                                item.write(savedFile);                                
                        }

                    }
                }
            }
            catch (FileUploadException fue)
            {
                responseStatus = FAILED_RESPONSE;
                fue.printStackTrace();                
            }
            catch (Exception e)
            {
                responseStatus = FAILED_RESPONSE;
                e.printStackTrace();
            }
        }        

        System.out.println("Returned Response Status: " + responseStatus);

        return responseStatus;
    }
}

参考:Jersey REST Web Service to Upload Multiple Files