


Explication détaillée de React, ajax et java pour implémenter la fonction de téléchargement d'images et de prévisualisation
Comment télécharger des images et les prévisualiser avec React+ajax+java ? Cet article partagera avec vous les fonctions de téléchargement d'images et de prévisualisation d'images à l'aide de React, ajax et java. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.
J'ai déjà cherché des informations sur le téléchargement d'images ajax sur Internet. La plupart des gens ont écrit en utilisant jQuery, mais utiliser JQuery ici est de peu d'utilité, alors je l'ai écrit moi-même.
À partir de l'image ci-dessus, cliquez d'abord sur le fichier sélectionné ci-dessus. Après avoir sélectionné l'image, l'image sera automatiquement téléchargée sur le serveur, ainsi que le nom de l'image et le chemin. de l'image sur le serveur sera renvoyée. Ensuite, affichez le nom du fichier et l'image sur la page.
Code source : Aperçu du téléchargement ajax
React :
import React from 'react'; import Http from './http' const URL = 'http://localhost:8080/fileuploadExample/UploadServlet'; export default class App extends React.Component { constructor(props) { super(props); this.state = { uploadedFile: "", uploadedFileGetUrl: '' }; } error() { alert('error') } callback(result) { this.setState({ uploadedFile: result.uploadedFile, uploadedFileGetUrl: result.uploadedFileGetUrl }); } handleImageUpload(e) { e.preventDefault() let file = e.target Http.post(URL, file, this.callback.bind(this), this.error) } render() { return ( <p> <input type="file" onChange={this.handleImageUpload.bind(this)}/> <p> {this.state.uploadedFileGetUrl === '' ? null : <p> <p>{this.state.uploadedFile}</p> <img src={this.state.uploadedFileGetUrl} alt="你选择的图片"/> </p>} </p> </p> ) } }
Code Ajax auto-encapsulé :
var Http = (function() { var http = {}; if (typeof window.XMLHttpRequest === "undefined") { window.XMLHttpRequest = function() { // 如果是i5就用Microsoft,其他就用Msxml2 return new window.ActiveXObject(navigator.userAgent .indexOf("MSIE 5") >= 0 ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"); }; } http.post = function(url, data, callback, error) { if (typeof data === "function") {//data可以不穿值 callback = data; data = null; } var timeout = setTimeout(function() {//超时设置 error(); }, 10000); var xhr = new XMLHttpRequest(); xhr.open('post', url); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { clearTimeout(timeout);//清除超时 if (xhr.status === 200){ //alert(xhr.responseText); callback(JSON.parse(xhr.responseText));//调用回调函数 } else { error(); } xhr = null;// 删除对象,防止内存溢出 } }; xhr.onerror = function() {//如果产生了错误 clearTimeout(timeout); error(); }; xhr.send(http.formDataCode(data)); }; http.formDataCode = function(data) { var fd = new FormData(); if (!data) { return null; } for ( var key in data) { if(data.files){ var file=data.files[0]; fd.append("image", file); }else{ fd.append(key, data[key]); } } return fd; } return http; })(); export default Http
En termes de téléchargement d'images en arrière-plan Java, il existe de nombreux exemples sur Internet qui peuvent être utilisés sur http://blog.csdn. .net/thc1987/article /details/15341201 Si vous êtes intéressé, vous pouvez jeter un oeil à cet article :
package com.example; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * Servlet implementation class UploadServlet */ @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; // 保存文件的目录 private static String PATH_FOLDER = "/"; // 存放临时文件的目录 private static String TEMP_FOLDER = "/"; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(); ServletContext servletCtx = config.getServletContext(); // 初始化路径 // 保存文件的目录 PATH_FOLDER = servletCtx.getRealPath("/upload"); // 存放临时文件的目录,存放xxx.tmp文件的目录 TEMP_FOLDER = servletCtx.getRealPath("/uploadTemp"); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); response.setHeader("Access-Control-Allow-Credentials", "true"); request.setCharacterEncoding("utf-8"); // 设置编码 response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); // 获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存, // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 /** * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem * 格式的 然后再将其真正写到 对应目录的硬盘上 */ factory.setRepository(new File(TEMP_FOLDER)); // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024 * 1024); // 高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); try { // 提交上来的信息都在这个list里面 // 这意味着可以上传多个文件 // 请自行组织代码 List<FileItem> list = upload.parseRequest(request); // 获取上传的文件 FileItem item = getUploadFileItem(list); // 获取文件名 String filename = getUploadFileName(item); // 保存后的文件名 String saveName = new Date().getTime() + filename.substring(filename.lastIndexOf(".")); // 保存后图片的浏览器访问路径 String picUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/upload/" + saveName; System.out.println("存放目录:" + PATH_FOLDER); System.out.println("文件名:" + filename); System.out.println("浏览器访问路径:" + picUrl); // 真正写到磁盘上 item.write(new File(PATH_FOLDER, saveName)); // 第三方提供的 PrintWriter writer = response.getWriter(); System.out.print("{"); System.out.print("uploadedFile:"+ "\"" + filename + "\""); System.out.print(",uploadedFileGetUrl:\"" + picUrl + "\""); System.out.print("}"); JSONObject result = new JSONObject(); result.put("uploadedFile", filename); result.put("uploadedFileGetUrl", picUrl); writer.write(result.toString()); writer.close(); } catch (Exception e) { e.printStackTrace(); /* * PrintWriter writer = response.getWriter(); writer.print("{"); * writer.print("error:"+e.toString()); writer.print("}"); * writer.close(); */ } } private FileItem getUploadFileItem(List<FileItem> list) { for (FileItem fileItem : list) { if (!fileItem.isFormField()) { return fileItem; } } return null; } private String getUploadFileName(FileItem item) { // 获取路径名 String value = item.getName(); System.out.println(value + ":value"); // 索引到最后一个反斜杠 int start = value.lastIndexOf("/"); // 截取 上传文件的 字符串名字,加1是 去掉反斜杠, String filename = value.substring(start + 1); return filename; } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Le code java ci-dessus a modifié ces points :
1. Insérez
response.setHeader("Access-Control-Allow-Origin","http://localhost:3000"); response.setHeader("Access-Control-Allow-Credentials", "true");
Ces deux lignes de code sont inter-domaines. Bien sûr, cela peut ne pas être sûr
2,
JSONObject result = new JSONObject(); result.put("uploadedFile", filename); result.put("uploadedFileGetUrl", picUrl); writer.write(result.toString());
Ici, la transmission de données json est utilisée entre la page et le serveur
Recommandations associées :
Comment implémenter la fonction de téléchargement et de prévisualisation d'images Ajax
exemple de code nodejs pour implémenter l'aperçu et le téléchargement des images
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Vue.js convient aux projets de petite et moyenne taille et aux itérations rapides, tandis que React convient aux applications grandes et complexes. 1) Vue.js est facile à utiliser et convient aux situations où l'équipe est insuffisante ou l'échelle du projet est petite. 2) React a un écosystème plus riche et convient aux projets avec des performances élevées et des besoins fonctionnels complexes.

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

React combine JSX et HTML pour améliorer l'expérience utilisateur. 1) JSX incorpore du HTML pour rendre le développement plus intuitif. 2) Le mécanisme DOM virtuel optimise les performances et réduit les opérations DOM. 3) Interface utilisateur de gestion basée sur les composants pour améliorer la maintenabilité. 4) La gestion des états et le traitement des événements améliorent l'interactivité.

Spring Boot simplifie la création d'applications Java robustes, évolutives et prêtes à la production, révolutionnant le développement de Java. Son approche "Convention sur la configuration", inhérente à l'écosystème de ressort, minimise la configuration manuelle, allo

PHP et Python ont chacun leurs propres avantages, et le choix doit être basé sur les exigences du projet. 1.Php convient au développement Web, avec une syntaxe simple et une efficacité d'exécution élevée. 2. Python convient à la science des données et à l'apprentissage automatique, avec une syntaxe concise et des bibliothèques riches.

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

PHP convient au développement Web, en particulier dans le développement rapide et le traitement du contenu dynamique, mais n'est pas bon dans les applications de la science des données et de l'entreprise. Par rapport à Python, PHP présente plus d'avantages dans le développement Web, mais n'est pas aussi bon que Python dans le domaine de la science des données; Par rapport à Java, PHP fonctionne moins bien dans les applications au niveau de l'entreprise, mais est plus flexible dans le développement Web; Par rapport à JavaScript, PHP est plus concis dans le développement back-end, mais n'est pas aussi bon que JavaScript dans le développement frontal.
