2

こんにちは、Restful Web サービスは初めてです。

私の目標は、1 回のリクエストで複数のユーザー アカウントを作成することです。

Web サービスを作成するために Jersey API を選択しています。

この WS は、複数のユーザーのアカウントを作成します。各ユーザー アカウントは、アバター (プロフィール写真) に関連付けられていました。ユーザー情報をアバターで送信しています (アバター ファイルは Base64 エンコーダーを使用して文字列形式にエンコードされています)。

私の質問は、リクエストに多くのユーザーがいて、各ユーザーがより大きなサイズのアバターに関連付けられている場合、Restful Web サービスはこれらのリクエストを処理できますか?

また、安らかな Web サービスの要求データ サイズは制限されていますか?

Jersey API でより良い Web サービスを作成するよう提案してください。

4

2 に答える 2

4

メッセージ本文でアバターを渡す代わりに、Jersey Multipart サポートを確認する必要があります。これにより、大きなファイルを安静なサービスにストリーミングできます。もう 1 つのプラス - もう 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 に答える