--JSP de l'écran de téléchargement à afficher en premier
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Java Sample</title>
</header>
<body>
<h1>Hello</h1>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="hidden" name="action_name" value="upload" />
<input type="file" name="file" />
<button>Upload</button>
</form>
</body>
</html>
/ upload
avec multipart / form-data--Contrôleur qui reçoit la demande de téléchargement
--L'échantillon de base est le même, mais quand ʻaction_name est ʻupload
, on a l'impression d'appeler ʻUploadAction. --Cette fois, nous recevrons des données multipart / form-data, donc le point est d'ajouter
@ MultipartConfig`.
package com.example.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.example.action.Action;
import com.example.action.UploadAction;
@WebServlet(urlPatterns = { "/upload" })
@MultipartConfig
public class UploadController extends HttpServlet {
@Override
protected void doPost(
HttpServletRequest request,
HttpServletResponse response
)
throws ServletException, IOException {
String strActionName = request.getParameter("action_name");
Action action = getInstance(strActionName);
String forwardPath = action.execute(request);
RequestDispatcher rd = request.getRequestDispatcher(forwardPath);
rd.forward(request, response);
}
private static Action getInstance(String actionName) {
switch (actionName) {
case "upload":
return new UploadAction();
default:
return null;
}
}
}
--Action pour recevoir et traiter les images
package com.example.action;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.Base64;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
public class UploadAction extends Action {
@Override
protected String processRequest(HttpServletRequest request) {
try {
Part filePart = request.getPart("file");
InputStream fileContent = filePart.getInputStream();
byte[] byteArray = getByteArray(fileContent);
String base64String = Base64.getEncoder().encodeToString(byteArray);
System.out.println("filePart: " + filePart);
System.out.println("fileContent: " + fileContent);
System.out.println("byteArray: " + byteArray);
System.out.println("base64String: " + base64String);
request.setAttribute("image", base64String);
} catch (Exception e) {}
return "image.jsp";
}
private static byte[] getByteArray(InputStream is) throws Exception {
ByteArrayOutputStream b = new ByteArrayOutputStream();
BufferedOutputStream os = new BufferedOutputStream(b);
while (true) {
int i = is.read();
if (i == -1) break;
os.write(i);
}
os.flush();
os.close();
return b.toByteArray();
}
}
--Les paramètres normaux sont obtenus avec request.getParameter (" xxx ")
, mais cette fois c'est un fichier, donc il est obtenu avec request.getPart (" xxx ")
.
――Après cela, je suis arrivé à Base64 avec le sentiment d'InputStream → octet → Base64.
――Parce que c'est un gros problème, j'arrive au point où je passe la valeur Base64 à JSP et l'affiche à l'écran
--JSP pour afficher des images
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<jsp:useBean id="image" scope="request" type="java.lang.String" />
<html>
<head>
<meta charset="UTF-8" />
<title>Java Sample</title>
</header>
<body>
<h1>Hello</h1>
<img src="data:image/png;base64,<%= image %>" />
</body>
</html>
--Base64 peut également être défini dans l'attribut src de la balise img, alors intégrez-le. ――Png Ce n'est pas bon d'être décisif ――Il semble que vous puissiez l'obtenir par un traitement côté serveur, mais il n'a pas été possible d'utiliser la méthode qui est sortie immédiatement après google ――Si vous pouvez le faire jusqu'à présent, vous pouvez télécharger l'image et l'écran d'aperçu s'affichera.
Recommended Posts