3

Jerseyを使用してレストサーバーを開発しています。サーバー上のフォルダーに画像をアップロードする API を作成する必要があります。私の API には 2 つのパラメーターが含まれている必要があります。文字列パラメーターとファイル パラメーター。

@POST
@Path("path")
@public Response uploadImage(@FormParam("name") String name, @FormDataParam("imagestream") InputStream imageStream)

クライアント アプリから 2 つのパラメーターを送信すると、両方の属性を受信できません。

私のクライアント側のコードは次のとおりです。

private static void instantiateConnection(String urlString, byte[] params)
{
    HttpURLConnection conn = null;

    try
    {
        URL url = new URL(urlString);

        conn = (HttpURLConnection) url.openConnection();

        outStream(conn, params);

        int responseCode = conn.getResponseCode();

        if (responseCode == HttpURLConnection.HTTP_OK)
        {
            InputStream instream = conn.getInputStream();

            instream.close();
        }

    }
    catch (MalformedURLException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    finally
    {
        conn.disconnect();
    }
}

private static void outStream(HttpURLConnection conn, byte[] param)
{
    String name = new String("name");

    conn.addRequestProperty("Content-Length", "" + (param.length + name.length()));
    conn.addRequestProperty("Content-Type", "multipart/mixed");

    try
    {
        conn.setRequestMethod("POST");
        conn.setUseCaches(false);
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setReadTimeout(15000);


        // Send request
        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
        wr.write(name.getBytes());
        wr.write(param);
        wr.flush();
        wr.close();
    }
    catch (ProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

    return;
}

どこが間違っていますか?

4

1 に答える 1

1

これが私が使用したコードのスニペットです。

@POST
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response newFile(@FormDataParam("file") InputStream uploadInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("description") String description) {

    String uploadFileLocation = "C:/upload/documents/";

    OutputStream out = null;

    int read = 0;
    byte[] bytes = new byte[1024];

    File directory = new File(uploadFileLocation);
    if(!directory.exists()){
        directory.mkdirs();
    }
    out = new FileOutputStream(new File(directory, fileDetail.getFileName()));
    while ((read = uploadInputStream.read(bytes)) != -1) {
        out.write(bytes, 0, read);
    }

    out.flush();
    out.close();

//Return Response
...
}
于 2013-04-03T13:50:47.147 に答える