SpringMVC使用AJAX上传图片

一、简介

通过把文件上传到tomcat的虚拟目录,实现代码和资源文件分开。

二、环境

spring+springmvc+mybatis

三、代码实现

1.导入文件上传的jar

       <!--上传图片-->

        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

2.在springmvc.xml中配置multipart类型解析器

 <!--文件上传配置-->
    <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
        <property name="defaultEncoding" value="utf-8"/>
        <!-- 上传文件大小上限,单位为字节(10485760=10M) -->
        <property name="maxUploadSize" value="10485760"/>
        <property name="maxInMemorySize" value="40960"/>
    </bean>

3.springmvc文件上传

package com.test.demo.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.*;

@Controller
public class UploadController {

    /**
     * 图片上传接口
     * @param model
     * @return
     */
    @RequestMapping(value = "/uploads",method = {RequestMethod.POST})
    @ResponseBody
    public String fileUploads(@RequestParam("file") CommonsMultipartFile file , HttpServletRequest request, Model model) throws IOException {

        //获取文件名 : file.getOriginalFilename();
        String uploadFileName = file.getOriginalFilename();
        String data=null;
        //如果文件名为空,直接回到首页!
        if ("".equals(uploadFileName)){
            data="";
            //封装数据
            return data;
        }
        System.out.println("上传文件名 : "+uploadFileName);

        //上传路径保存设置
        String path = request.getServletContext().getRealPath("/upload");
        //如果路径不存在,创建一个
        File realPath = new File(path);
        if (!realPath.exists()){
            realPath.mkdir();
        }
        System.out.println("上传文件保存地址:"+realPath);
        InputStream is = file.getInputStream(); //文件输入流
        OutputStream os = new FileOutputStream(new File(realPath,uploadFileName)); //文件输出流

        //读取写出
        int len=0;
        byte[] buffer = new byte[1024];
        while ((len=is.read(buffer))!=-1){
            os.write(buffer,0,len);
            os.flush();
        }
        os.close();
        is.close();
        System.out.println(realPath+"/"+uploadFileName);
        //返回给前端图片名
        data=uploadFileName;
        //封装数据
        return data;
    }
}

4.前端使用ajax

<p>文件上传</p>
<div class="san3">
  <input type="file" name="fujianID" id="fujianID" onchange="UpdateFile()"/>
  <input type = "hidden" name="fujianid" id="file2" />
</div>


<script>
    //上传文件
    function UpdateFile(){
        var file_fujian = $("input[name='fujianID']").val();//用户文件内容(文件)
        // 判断文件是否为空
        if ( file_fujian== "") {
            layer.msg("青选择上传的附件",{icon:1,time:1000});
            return false;
        }
        //判断文件类型,根据自己需要来做判断
        /*var fujianID =  file_fujian.substring( file_fujian.lastIndexOf(".") + 1).toLowerCase();
        if(fujianID != "xls" && fujianID !="xlsx"&&fujianID !="docx"&&fujianID !="doc"&&fujianID !="txt"){
              layer.msg("请选择Execl文或者word文件或者txt文件格式!",{icon:1,time:2000});
            return false;
        }*/
        //判断文件大小
        var size1 = $("input[name='fujianID']")[0].files[0].size;
        if (size1>104857600) {
            layer.msg("上传的附件不能大于100M",{icon:1,time:2000});
            return false;
        }

        boo1 = true;
        var type = "file";
        var formData = new FormData();//这里需要实例化一个FormData来进行文件上传
        formData.append(type,$("#fujianID")[0].files[0]);
        $.ajax({
            type:'POST',
            url:"uploads",
            data:formData,
            async:false,
            processData:false,
            contentType:false,
            success:function(res){
                console.log(res)
               
            }
        });
    }
</script>

如果想要显示你的上传成功的图片需要配置tomcat的·虚拟目录映射

找到这个目录点击OK

 

最后别忘了设置路径

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Spring MVC和AJAX文件上传下载,你可以按照以下步骤操作: 文件上传: 1. 创建一个包含文件上传表单的HTML页面。 2. 创建一个Spring MVC控制器,用于处理文件上传的请求。 3. 在控制器中,使用`@RequestMapping`注解来映射文件上传的URL,并使用`@RequestParam`注解来接收文件。 4. 在处理方法中,使用MultipartFile参数来接收上传的文件,并使用`transferTo()`方法将文件保存到指定位置。 文件下载: 1. 创建一个Spring MVC控制器,用于处理文件下载的请求。 2. 在控制器中,使用`@RequestMapping`注解来映射文件下载的URL。 3. 在处理方法中,使用`@PathVariable`注解来接收文件名参数。 4. 使用`ServletContext`对象获取文件路径,并创建一个`File`对象。 5. 使用`ResponseEntity`类设置下载响应的头部信息和内容。 通过AJAX实现文件上传和下载: 1. 使用JavaScript创建一个AJAX请求对象。 2. 使用FormData对象将文件添加到请求中。 3. 发送AJAX请求到Spring MVC控制器的URL,并设置请求方法为POST。 4. 在Spring MVC控制器中,使用MultipartFile参数接收文件,并处理文件上传的逻辑。 5. 在返回的响应中,可以包含上传成功或失败的消息。 注意:在Spring配置文件中,需要配置multipart解析器来支持文件上传。 以上是实现Spring MVC和AJAX文件上传下载的一般步骤,你可以根据具体需求进行适当的调整和扩展。希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值