0

プロジェクトの小さな部分として、パラメーターとして渡されるいくつかの文字列も必要とするファイルアップロードWebサービスを作成しようとしています...

これまでのところ、ファイル アップロード Web サービスを作成することができました。ただし、入力としてアップロードするファイルのみを渡す場合にのみ機能します。ここで、いくつかのパラメーターも受け入れるように Web サービスを変更しました。しかし、それは私にエラーを与えています:

java.lang.IllegalArgumentException: URLDecoder: エスケープ (%) パターンの 16 進文字が無効です - 入力文字列の場合: "&'"

ここにスタックトレース全体をコピーすることはできませんが、それは無意味だと思います。これは私のWebサービスです:

    @POST 
@Path("/postdata") 
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void postData3(List<Attachment> atts, @FormParam("username") final String username, @Context HttpServletRequest request)
{
    System.out.println(username);
    String home = "/home/yashdosi/s";
    for(Attachment att : atts)
    {
        DataHandler dataHandler = att.getDataHandler();
        try 
        {
            InputStream stream = dataHandler.getInputStream();
            MultivaluedMap map = att.getHeaders();
            OutputStream out = new FileOutputStream(new File(home + "//" + getFileName(map)));

            int read = 0;
            byte[] bytes = new byte[1024];
            while ((read = stream.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }
            stream.close();
            out.flush();
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

そして、これは私のJavaクライアントです:

        HttpClient httpclient = new DefaultHttpClient();
    try {
        HttpPost httppost = new HttpPost("http://localhost:8080/fileupload-ws/services/postdata");

        FileBody img = new FileBody(new File("/home/yashdosi/1.jpg"));
        FileBody html = new FileBody(new File("/home/yashdosi/hotmail.html"));
        StringBody contentBody = new StringBody("some.email@gmail.com");

        MultipartEntity reqEntity = new MultipartEntity();
        reqEntity.addPart("image", img);
        reqEntity.addPart("html", html);
        reqEntity.addPart("username", contentBody);

        httppost.setEntity(reqEntity);
        //httppost.setHeader("Content-Type", "multipart/form-data");

        System.out.println("executing request " + httppost.getRequestLine());
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity resEntity = response.getEntity();

        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        if (resEntity != null) {
            System.out.println("Response content length: " + resEntity.getContentLength());
        }
        EntityUtils.consume(resEntity);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally {
        try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
    }

このエラーの原因は何ですか? または、この問題をどのように回避する必要がありますか!?

4

1 に答える 1

1

@MultiPart(value="image")画像 @MultiPart(value="html")用、html@MultiPart(value="username")用、コンテンツ本文用に使用してみてください。私のために働いた。

于 2012-11-02T06:23:10.097 に答える