[Java] Téléchargez une image et convertissez-la en Base64

Aperçu

code

Écran de téléchargement

--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>

Processus d'acquisition d'images

--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

Affichage de l'image

--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.

Résumé

Recommended Posts

[Java] Téléchargez une image et convertissez-la en Base64
Ceci et cela à propos de Base64 (Java)
Java et JavaScript
XXE et Java
Charger et télécharger des notes en Java sur le stockage Azure
[Débutant] Téléchargez des images et des fichiers avec Spring [Autosuffisant]
Télécharger et télécharger des notes en java sur S3
Java permet l'extraction de texte et d'images PDF
Getter et Setter (Java)
CarrierWave Télécharger plusieurs images
[Java] Thread et exécutable
Java vrai et faux
[Java] Comparaison des chaînes de caractères et && et ||
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
[Java] Branchement et répétition
[Java] Types de variables et types
java (classe et instance)
[Java] Surcharge et remplacement
Etudier Java # 2 (\ marque et opérateur)
Java version 8 et fonctionnalités ultérieures
[Rails API + Vue] Télécharger et afficher des images à l'aide du stockage actif
[Java] Différence entre == et égal
[Java] Zone de pile et zone statique
[Java] Classe générique et méthode générique
Programmation Java (variables et données)
Cryptage et décryptage Java PDF
Comment réduire les images Java
Enregistrer et afficher plusieurs images
Définition et instanciation de classe Java
[Java] À propos de String et StringBuilder
[Java] HashCode et remplacement égal
☾ Instruction Java / Repeat et instruction de contrôle de répétition
Avantages et inconvénients de Java
java (branchement conditionnel et répétition)
À propos du package Java et de l'importation
Histoire de remplacement C # et Java
Méthodes et classes abstraites Java
Instructions Java while et for
Encapsulation Java et getters et setters
Encodeur Base64 ceci et cela
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
À propos des méthodes Java statiques et non statiques
J'ai comparé les constructeurs PHP et Java
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
[Java] Différence entre Hashmap et HashTable
Déclaration, initialisation et types de variables Java
Insertion Java Excel et extraction d'images
Installez Java et Tomcat avec Ansible
SDK AWS pour Java 1.11.x et 2.x
[Java] Types de base et notes d'instructions
Date de sortie de Java et résumé EOL
À propos de Biocontainers fastqc et Java
Java pour les débutants, les expressions et les opérateurs 1
Série Java Primer (variations et types)
Exemple d'encodage et de décodage en Java
[Java débutant] À propos de l'abstraction et de l'interface
Télécharger des fichiers à l'aide de Java HttpURLConnection