首页 > 其他分享 >springmvc中设置文件的上传与下载,首先需要导入依赖,之后需要在springmvc.xml中配置问价上传解析器。在上传文件的时候设置 一个form表单里面设置一个输入框,类型为file,为了防止

springmvc中设置文件的上传与下载,首先需要导入依赖,之后需要在springmvc.xml中配置问价上传解析器。在上传文件的时候设置 一个form表单里面设置一个输入框,类型为file,为了防止

时间:2023-09-16 10:33:54浏览次数:42  
标签:文件 String springmvc springframework 设置 new import 上传

2023-09-16

导入依赖

 <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>

设置文件上传解析器

springmvc.xml

<?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: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.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.hh"></context:component-scan>

    <!--设置前端控制器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"></property>
        <property name="characterEncoding" value="UTF-8"></property>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--视图前缀-->
                        <property name="prefix" value="/WEB-INF/templates/"></property>
                        <!--视图后缀-->
                        <property name="suffix" value=".html"></property>
                        <property name="templateMode" value="HTML5"></property>
                        <property name="characterEncoding" value="UTF-8"></property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

    <!--设置默认的servlet处理静态资源-->
    <mvc:default-servlet-handler/>

    <!--开启视图注解驱动器-->
    <mvc:annotation-driven />

    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>

    <!--配置文件上传的解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
</beans>

index.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<div id="app">
    <h1>index.html</h1>
    <input type="button" @click="testAjax()" value="测试ajax">
    <input type="button" @click="testRequestBody()" value="测试requestBody">
    <input type="button" @click="testRequestBodyJson()" value="测试requestBodyJson"><br>
    <a th:href="@{/test/responseBody}">测试responseBody</a>
    <a th:href="@{/test/down}">测试文件下载</a>
    <form th:action="@{/test/up}" method="post" enctype="multipart/form-data">
        头像:<input type="file" name="photo"><br>
        <input type="submit" value="上传">
    </form>
</div>
<script type="text/javascript" th:src="@{/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/js/axios.min.js}"></script>
<script type="text/javascript">
    new Vue({
        el:"#app",
        methods:{
            testAjax(){
                axios.post(
                    "/spring_mvc_ajax_war_exploded/test/ajax?id=1002",
                    {username:"root",password:"123456"}
                ).then(response=>{
                    console.log(response.data)
                })
            },
            testRequestBody(){
                axios.post(
                    "/spring_mvc_ajax_war_exploded/test/ajax/requestbody",
                    {id:1,name:"jack",age:18,gender:"男"}
                ).then(response=>{
                    console.log(response.data)
                })
            },
            testRequestBodyJson(){
                axios.post(
                    "/spring_mvc_ajax_war_exploded/test/responseBodyJson"
                ).then(response=>{
                    console.log(response.data)
                })
            }

        }
    })
</script>
</body>
</html>

FileUpAndDownController

package com.hh.controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.UUID;

/**
 * @author hh
 * @version 1.0
 * @DATE 2023-09-16 9:25:49
 */
@Controller
public class FileUpAndDownController {

    @RequestMapping("/test/up")
    public String testUp(MultipartFile photo,HttpSession session) throws IOException {
        //获取上传文件的文件名
        String fileName = photo.getOriginalFilename();
        //获取上传文件的后缀名
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        //获取UUID
        String uuid = UUID.randomUUID().toString();
        //拼接一个新的文件名(为了防止上传同名的文件,导致文件内容被覆盖)
        fileName = uuid +hzName;

        //获取servletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取photo的真实路径
        String photoPath = servletContext.getRealPath("photo");
        //创建photoPath所对应的File对象
        File file = new File(photoPath);
        //判断file所对应的目录是否存在
        if(!file.exists()){
            file.mkdir();
        }
        String finalPath = photoPath+File.separator+fileName;
        //上传文件
        photo.transferTo(new File(finalPath));

        return "success";
    }

    @RequestMapping("/test/down")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("/img/1.jpg");
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组
        byte[] bytes = new byte[is.available()];
        //将流读到字节数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String,String> headers = new HttpHeaders();
        //设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition","attachment;filename=1.jpg");
        //设置响应码
        HttpStatus statusCode = HttpStatus.OK;
        //出啊关键ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes,headers,statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }
}

 

标签:文件,String,springmvc,springframework,设置,new,import,上传
From: https://www.cnblogs.com/isDaHua/p/17706382.html

相关文章

  • obs上传文件到服务器,附件同步到华为云OBS存储备份实践(服务端API应用)
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingGrapeCity.Forguncy.ServerApi;usingOBS;usingOBS.Model;namespaceFileToHuaweiOBS{publicclassFileToHuaweiOBS:Forgunc......
  • 佳博GP1324D wifi版设置教程
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!1、将打印机接上电源,打开,然后过1分钟后,如下图:连接WIFI热点printer-AP2、查看路由器网段记住自己电脑上的网段,再打开网页进行下一步。3、打开网页登录到后台,账户和密码......
  • PHP实现页面间的链接和背景图片设置
    在PHP中实现页面间的链接非常简单,你可以使用HTML的<a>标签来创建链接。下面是一个示例代码,当用户点击按钮后,将跳转到下一个页面:<!--第一个页面--><!DOCTYPEhtml><html><head><title>第一个页面</title></head><body><buttononclick="window.locati......
  • linux DVWA 文件上传之 Security level set to high
    --总体步骤1、生成图片木马2、上传图片木马3、通过文件包含执行图片马一、生成图片木马1、随便准备一张图片——football.png2、test.php写入内容:<?php@eval($_GET['x']);?>3、生成图片木马,命令行执行:catfootball.pngtest.php>>my.png二、把DVWA的安全级别......
  • word安装(ppt、excel),以及word的常用设置
    一、安装word(ppt、excel)0、关闭电脑的所有杀毒软件等到激活的时候,注意断开网络!!!一般,白嫖的时候,激活都要记得断网,杀毒软件是从下载就得关闭了!1、卸载卸载:把电脑所有和办公office相关的软件卸载了,比如:word、ppt、excel、onenote、outlook等等[具体参考下图],注意还有wps也要一起卸载......
  • Dynamics CRM - 使用 JS 对字段取值、赋值、实体属性设置等
    整理下平时CRM开发中用到的一些基本的js操作取值:varoResult=Xrm.Page.getAttribute(sFieldName).getValue();varoResult=Xrm.Page.getControl(sFieldName).getAttribute().getValue();赋值:一般类型:Xrm.Page.getAttribute(sFieldName).setValue(object);OptionSe......
  • 论3个软件的协调设置
    需求: daz导出人体模型,blender建立模型,md制作衣服 1.daz导出到blender->需要10%的缩放2.blender制作好模型,做好材质之后,需要放大100倍,可以使用md自身带的衣服3.md导出时缩小100倍可以直接缩放到blender大小,此时所做的动画可以直接再导入blender制作衣服材质整体缩放系数对比......
  • VScode使用git,设置了user.name和user.email,但是仍无法推送代码到仓库的解决办法
    问题写自己项目的时候,想推送一份新的上去,突然间就推送不上去,提示需要设置user.name和user.email解决使用下面的命令检查(如果没值请先设置值):##目标仓库检查(你需要在项目文件夹下打开git)gitconfiguser.namegitconfiguser.email##全局仓库检查gitconfig--globaluser.n......
  • 在线直播源码,AlarmManager定时器设置
    在线直播源码,AlarmManager定时器设置Android开发中一般常见的定时器有Timer、Handler。某些场景下也会使用到AlarmManager,相对于前面两者,AlarmManager功能更加多样,某些场景下有更准确的定时效果。 //Timer    Timertimer=newTimer();    TimerTaskt......
  • 针对部分设置完密码出现MY_PC账户的解决办法
    看了图示很简单吧,就按照这个操作按照提示搞定即可,搞完后会提示重启,重启后就可以了。......