サイトにこれと似た質問がいくつかあることを知っており、それらのほとんどを読みました。私も解決策をグーグルで調べましたが、まだ問題があります。
したがって、私のプロジェクトでは、クライアントから混合データ (画像、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つの質問があります。