質問: multipartFormData.getFile("image"); ``` それをS3にアップロードして、CloudFront経由でダウンロードして表示させることは可能なのですが、 わざわざアップロードするのは容量・速度的によろしくないと思うので、 どうにかJavaから何かしらの形でHTMLへデータを渡して画像を表示させたいです。 どなたか、方法をご教授ください。 宜しく御願い致します。
回答: リクエストで受け取った画像ファイルをbase64エンコーディングして、レスポンスとして返すHTMLに含めるという方法はどうでしょうか。 ``` package controllers; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; import play.mvc.Controller; import play.mvc.Http.MultipartFormData; import play.mvc.Http.MultipartFormData.FilePart; import play.mvc.Result; /** * This controller contains an action to handle HTTP requests * to the application's home page. */ public class HomeController extends Controller { public Result upload() throws IOException { MultipartFormData multipartFormData = request().body().asMultipartFormData(); FilePart image = multipartFormData.getFile("picture"); // アップロードされたファイルをbyte配列に変換する byte[] bytes = Files.readAllBytes(Paths.get(image.getFile().getAbsolutePath())); // byte配列をbase64に変換する String base64 = Base64.getEncoder().encodeToString(bytes); // imgタグのsrcにurlスキームdataを用いてbase64で出力する return ok(String.format("", image.getContentType(), base64)) .as("text/html; charset=iso-8859-1"); } } ``` urlスキームdataについては以下がわかりやすいかと思います。