2

嗨,我是 Restful Web 服务的新手。

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

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

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

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

RESTful Web 服务中的请求数据大小是否也有限制?

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

4

2 回答 2

4

您应该查看Jersey Multipart 支持,而不是在消息正文中传递头像- 它可以让您将大文件流式传输到您的 restful 服务。另一个优点 - 您将不再需要 Base64 编码。

于 2012-08-13T07:08:44.450 回答
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 服务上传多个文件

于 2012-08-23T07:20:05.230 回答