用LayUI和ajax实现文件上传,“请求上传接口出现异常”问题

在ssm框架下,用LayUI(ajax)实现文件上传,以及解决“请求上传接口出现异常”问题

一.框架、样式、异常情况如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、1.在jsp中的body中写按钮和上传后图片放入的框

<div class="layui-form-item layui-form-text">
                                <label class="layui-form-label">上传按钮</label>
                                <div class="layui-input-block">
                                    <button type="button" class="layui-btn" id="test1">
                                        <i class="layui-icon">&#xe67c;</i>上传图片
                                    </button>
                                </div>
                            </div>

2.实现ajax代码如下(发现我的要写在</html>后面,不知道你们写在<head></head>或者<body></body>里面有没有问题):

<script>
    layui.use('upload', function() {
        let $ = layui.jquery
        let upload = layui.upload
        //常规使用 - 普通图片上传
        let uploadInst = upload.render({
            elem: '#test1'
            , url: '/upload/image' //改成您自己的上传接口
            ,dataType:"json"
            , before: function (obj) {
                //预读本地文件示例,不支持ie8
                obj.preview(function (index, file, result) {
                    $('#image').attr('src', result); //图片链接(base64)
                    alert(src);
                });
            }
            , done: function (res) {
                //如果上传失败
                if (res.code>0) {
                    return layer.msg('上传失败!!!');
                }
                alert("成功");

            }
            , error: function () {
                alert("上传失败");
            }
        });
    });
</script>

3.导入LayUI,(在官网上https://www.layui.com/上下载)

 <link rel="stylesheet" href="../layui/2.5.7/css/layui.css">
    <script src="../layui/2.5.7/layui.js"></script>

4.实体类DataJson.java

public class DataJson {
    private Integer code;
    private String msg;
    private Map<String,String> data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Map<String, String> getData() {
        return data;
    }

    public void setData(Map<String, String> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "DataJson{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

5.工具类,UploadUtils .java,这里上传路径为webapp下的upload,一定要在target的对应地方建立一个upload文件夹,不然找不到文件路径。

public class UploadUtils {
    //定义一个上传文件的路径,webapp下的upload
    private static final String path = UploadUtils.class.getClassLoader().getResource("").getPath();
    private static final String BASE_PATH = path.substring(0, path.indexOf("/WEB-INF/"))+"\\upload";
    //定义文件服务器的访问地址
    private static  final String SERVER_PATH="http://localhost:8080/upload/";
    public static String upload(MultipartFile file){
        //获得上传文件的名称
        String filename = file.getOriginalFilename();
        String newFileName =filename;
        //创建文件实例对象
        File uploadFile = new File(BASE_PATH,newFileName);
        //判断当前文件是否存在
        if (!uploadFile.exists()){
            //如果不存在就创建一个文件夹
            uploadFile.mkdirs();
        }
        //执行文件上传的命令
        try {
            file.transferTo(uploadFile);
        } catch (IOException e) {
            return null;
        }
        System.out.println("11111111111");
        System.out.println(BASE_PATH);
        return SERVER_PATH+newFileName;
    }
}

在这里插入图片描述
6.controller类,UploadController.java

@Controller
@RequestMapping("/upload")
public class UploadController {
    @RequestMapping("/image")
    @ResponseBody
        public DataJson image(MultipartFile file){
        //调用工具类完成文件上传
        String imagePath = UploadUtils.upload(file);
        System.out.println(imagePath);
        DataJson dataJson = new DataJson();
        if (imagePath != null){
            //创建一个HashMap用来存放图片路径
            HashMap hashMap = new HashMap();
            hashMap.put("src",imagePath);
            dataJson.setCode(0);
            dataJson.setMsg("上传成功");
            dataJson.setData(hashMap);
            System.out.println("成功!!!!!!!");
        }else{
            dataJson.setCode(1);
            dataJson.setMsg("上传失败");
            System.out.println("失败!!!!!!!!");
        }
        return dataJson;
    }
}

7.建立ToUpLoadController.java控制类,uploadfile.jsp就是我们创建的页面(也可以用.html的),运行项目,访问http://localhost:8080/uploadFile/upload就可。

@Controller
@RequestMapping("/uploadFile")
public class ToUpLoadController {
    @RequestMapping("/upload")
    public String userlogin(){
        return "uploadfile";

    }
}

8.当我们访问时,会出现“请求上传接口出现异常”提示,接下来,我们来看下处理方法。
三、处理“接口请求异常”问题。
1.上传图片时,,页面上显示了我们上传的图片,进入ajax的error,页面上显示“请求上传接口出现异常”弹窗,项目中报错如下,这是没有提供依赖导致的,在pom中加入依赖,在springmvc.xml中加入multi-par配置
在这里插入图片描述

<!--文件上传-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
 <!--    处理文件上传,id是固定值,不可改变。提供multi-part配置,处理parts-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--        上传大小限制50M-->
        <property name="maxUploadSize">
            <value>52428800</value>
        </property>
        <property name="defaultEncoding">
            <value>utf-8</value>
        </property>
    </bean>

2.现在后台图片上传正常,项目中没有报错,但是页面上还是显示“请求上传接口出现异常”弹窗,ajax进入了error。此时在pom中加入依赖(如果报错还是没变,则可能是导入的版本不匹配或者版本太低)

   <!-- JACKSON包,让Spring MVC支持JSON视图的解析以及返回JSON数据进行呈现 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

在这里插入图片描述
在这里插入图片描述
好了,现在项目没有错误了,可以正常运行了。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值