[SpringMVC] Téléchargement et téléchargement de fichiers, utilisation de JREBEL

Table des matières

Introduction

2. Téléchargement de fichiers

1. Téléchargement d'un seul fichier

1.1. Préparation de la fiche technique

1.2. Ajouter des dépendances

1.3. Fichier de configuration

1.4. Formulaires de rédaction

1.5. Écrire la couche contrôleur

2. Téléchargement de plusieurs fichiers

2.1. Formulaire de rédaction

2.2. Écrire la couche contrôleur

2.3. Tests

3. Téléchargement de fichiers

4. Utilisation de JREBEL

1. Téléchargez et inscrivez-vous

2. Paramètres hors ligne


Introduction

Pourquoi utiliser le téléversement et le téléchargement de fichiers ? effet?

Le téléchargement et le téléchargement de fichiers SpringMVC sont une fonction courante qui permet aux utilisateurs de télécharger des fichiers sur le serveur ou de télécharger des fichiers depuis le serveur. Il s'agit d'une fonctionnalité essentielle pour de nombreuses applications Web, telles que le stockage en ligne, les systèmes de gestion de documents, etc. SpringMVC fournit des annotations et des API pratiques qui simplifient grandement le téléchargement et le téléchargement de fichiers. En termes de téléchargement de fichiers, SpringMVC fournit l'annotation @RequestParam et la classe MultipartFile pour gérer facilement les fichiers téléchargés. En termes de téléchargement de fichiers, SpringMVC fournit la classe ResponseEntity , qui peut envoyer des fichiers au client en réponse.

2. Téléchargement de fichiers

1. Téléchargement d'un seul fichier

1.1. Préparation de la fiche technique

Il est également possible de l'utiliser selon votre propre tableau, il sert juste à sauvegarder des données.

1.2. Ajouter des dépendances

Ajoutez des dépendances de téléchargement de fichiers dans pom.xml dans votre Spring MVC

<dependencies>        
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>
</dependencies>

1.3. Fichier de configuration

Ajoutez la configuration dans votre propre fichier spring-mvc.xml

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
    <property name="defaultEncoding" value="UTF-8"></property>
    <!-- 文件最大大小(字节) 1024*1024*50=50M-->
    <property name="maxUploadSize" value="52428800"></property>
    <!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
    <property name="resolveLazily" value="true"/>
</bean>

Ci-dessous, je fournis la configuration de mon fichier

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.3.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.tgq及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.tgq"/>

    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven/>

    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--4) 单独处理图片、样式、js等资源 -->
    <!--        <mvc:resources location="/static/" mapping="/static/**"/>-->
    <!--    处理文件上传下载问题-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 文件最大大小(字节) 1024*1024*50=50M-->
        <property name="maxUploadSize" value="52428800"></property>
        <!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
        <property name="resolveLazily" value="true"/>
    </bean>
    <!--  处理controller层发送请求到biz,会经过切面的拦截处理  -->
    <aop:aspectj-autoproxy/>
</beans>

1.4. Formulaires de rédaction

La méthode de soumission du formulaire est method="post" et enctype="multipart/form-data"

<%--
  Created by IntelliJ IDEA.
  User: tgq
  Date: 9/9/2023
  Time: 下午2:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>图片上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/sc/upload" method="post" enctype="multipart/form-data">
    <label>编号:</label><input type="text" name="cid" readonly="readonly" value="${param.cid}"/><br/>
    <label>图片:</label><input type="file" name="zx"/><br/>
    <input type="submit" value="上传图片"/>
</form>
</body>
</html>

Le nom de l'image téléchargée ne peut pas être le même que le nom de la colonne de la table de la base de données , mais il doit être le même que le nom du code back-end.

1.5. Écrire la couche contrôleur

@Controller
@RequestMapping("/sc")
public class StrutsClasController {

    @Autowired
    private StrutsClasBiz strutsClasBiz;

 /**
     * 文件上传
     * <p>
     * //     * @param req
     * //     * @param strutsClas
     *
     * @param zx
     * @return
     */
    @RequestMapping(value = "/upload")
    public String upload(StrutsClas strutsClas, MultipartFile zx) {
//    public String upload(HttpServletRequest req, StrutsClas strutsClas, MultipartFile pic) {
        try {
            //思路:
            //1) 将上传图片保存到服务器中的指定位置
//            本地保存地址
//            String dir = PropertiesUtil.getValue("dir");
              String dir="d:/";
//            网络保存地址/upload/
//            String server = PropertiesUtil.getValue("server");
              String server="/upload/";
//            文件名
            String filename = zx.getOriginalFilename();
//            System.out.println("文件名:" + filename);
//            文件类别
//            System.out.println("文件类别" + zx.getContentType());
            System.out.println(strutsClas);
            FileUtils.copyInputStreamToFile(zx.getInputStream(), new File(dir + filename));
            //2) 更新数据库表t_struts_class图片记录
            strutsClas.setPic(server + filename);
            strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:list";
    }
}

Lors de la configuration de Tomcat, n'oubliez pas d'ajouter le mappage des adresses de téléchargement

2. Téléchargement de plusieurs fichiers

2.1. Formulaire de rédaction

<form method="post" action="/sc/uploads" enctype="multipart/form-data">
    <input type="file" name="files" multiple>
    <button type="submit">上传</button>
</form>

2.2. Écrire la couche contrôleur

 /**
     * 多文件上传
     *
     * @param req
     * @param clas
     * @param files
     * @return
     */
    @RequestMapping("/uploads")
    public String uploads(HttpServletRequest req,MultipartFile[] files) {
        try {
            StringBuffer sb = new StringBuffer();
            for (MultipartFile cfile : files) {
                //思路:
                //1) 将上传图片保存到服务器中的指定位置
                String dir = "D:/temp/upload/";
                String server = "/upload/";
                String filename = cfile.getOriginalFilename();
                FileUtils.copyInputStreamToFile(cfile.getInputStream(), new File(dir + filename));
                sb.append(filename).append(",");
            }
            System.out.println(sb.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:list";
    }

2.3. Tests

Mais lorsque nous sélectionnons plusieurs fichiers à télécharger,

nos fichiers locaux sont vides.


Lorsque nous le téléchargerons, il sera téléchargé localement

Il en va de même pour notre base de données

3. Téléchargement de fichiers

Opérez selon votre propre table

<a href="${pageContext.request.contextPath }/sc/download?cid=${b.cid}">下载图片</a>

Écrire la méthode de la couche contrôleur

/**
     * 文件下载
     *
     * @param strutsClas
     * @param req
     * @return
     */
    @RequestMapping(value = "/download")
    public ResponseEntity<byte[]> download(StrutsClas strutsClas, HttpServletRequest req) {

        try {
            //先根据文件id查询对应图片信息
            StrutsClas strutsClas1 = this.strutsClasBiz.selectByPrimaryKey(strutsClas.getCid());
//需要下载的地址
            String diskPath = PropertiesUtil.getValue("dir");
//服务器里面保存图片的地址
            String reqPath = PropertiesUtil.getValue("server");
            String realPath = strutsClas1.getPic().replace(reqPath, diskPath);
            String fileName = realPath.substring(realPath.lastIndexOf("/") + 1);
            //下载关键代码
            File file = new File(realPath);
            HttpHeaders headers = new HttpHeaders();//http头信息
            String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");//设置编码
            headers.setContentDispositionFormData("attachment", downloadFileName);
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

Il sera téléchargé lorsque nous cliquons sur télécharger

4. Utilisation de JREBEL

1. Téléchargez et inscrivez-vous

Recherchez le plug-in JRebel et téléchargez-le. Après une installation réussie, il vous sera demandé de redémarrer. Après le redémarrage, appuyez sur le bouton de fonctionnement.

Inscrivez-vous dans la boîte contextuelle

Remplissez http://127.0.0.1:8888/GUID dans le premier    

GUID : passez en GUID et remplissez l'ID   généré dans les versions en ligne

Confirmation définitive de l'inscription

Démarrez votre agent. Puis lancez JRebel

2. Paramètres hors ligne

Entrez nos paramètres, le principe est que nous devons démarrer notre agent pour effectuer cette opération

Je suppose que tu aimes

Origine blog.csdn.net/weixin_74383330/article/details/132776908
conseillé
Classement