0

サイトにこれと似た質問がいくつかあることを知っており、それらのほとんどを読みました。私も解決策をグーグルで調べましたが、まだ問題があります。

したがって、私のプロジェクトでは、クライアントから混合データ (画像、2 つの文字列 (会社、種類)、日付データ (月、年)、およびいくつかの整数) を送信するために使用されるマルチパート ポスト リクエストをキャッチする必要があります。このリクエストを受け取ったら、画像のコントラストと明るさを変更し、色をグレー トーンに変更する必要があります。

デバッグには Postman Chrome 拡張機能を使用します。今のところ、画像の送信のみに集中しています。さまざまな方法でリクエストの送信をテストしましたが、半分は「404 Not Found」エラーが発生し、残りの半分は間違ったデータが返されました (ほとんどが 0 の配列)。以下は、私のリソース メソッドで使用されるコードです。

@Component
@Path("/code")
@Produces("application/json")
public class EncodeResource extends BasicResource {
    @POST
    @Path("/encode")
    @Consumes("multipart/form-data")
    public String encodeImage(
            @FormDataParam("image") InputStream imageInputStream) {
        BufferedImage imageBuffer = null;
        try {
            imageBuffer = ImageIO.read(imageInputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (imageBuffer != null)
            return okResponse(<some parameters>);
        else
            return errorResponse(<some parameters>);
    }
}

ImageInputStream にはバイト配列が含まれていますが、 ImageIO.read() は常にnullを返します。さまざまな拡張子でさまざまな画像を試しましたが(imageioはデフォルトで読み取ることができ、チェックしました)、同じ結果が得られました。私が思うに、inputStream に「不要な」情報がいくつかあるために発生するため、imageio.read() はそれをどのタイプの画像にも変換できません。InputStream を File に変更すると、突然見つかりました。

@FormDataParam("image") File imageInputStream

...そして、tomcat .tmp ファイルによって保存されていることを確認します。それは次のように見えました:

------WebKitFormBoundary4nC1XD4cevbbRh7A

Content-Disposition: フォームデータ。名前="画像"; ファイル名="1.jpg">

コンテンツ タイプ: 画像/jpeg

(バイト数が多い)

------WebKitFormBoundary4nC1XD4cevbbRh7A--

そしてもちろん imageio.read() はnullを返しました。

そのすべてを要約すると、実際には2つの質問があります。

  1. なぜ 404 エラーが発生したのですか?どうすれば修正できますか? たとえば、私はこれを試して、ここのようにしました。そして、少なくとも何かを受け取るには、ここから2 番目の @FormDataParam を削除する必要がありました。Postman の「特定の」フォームデータ要求が原因でしょうか?
  2. なぜ間違ったデータを取得したのですか? 受信したファイルを解析して、「正しい」バイト配列を取得できますか? または、他の何か?..
4

0 に答える 0