第一篇:关于SSM文件、图片导入功能,赠送源码

很多刚毕业的小伙伴,在初学Java面向对编程时,往往因为某个方法不知道,或者说不会用,再或者根本不知道有这个方法时就会感到很困惑,从而失去编程语言的热度。这篇文章给大家分享我的学习文件导入导出时期遇到的问题。


一、整体思路

首先学习MultipartFile这个类他 extends InputStreamSource 这个类 ;
我们自己写一实现MultipartFile这个类,会发现有这几个功能,获取文件的类型、大小、文件名、判断是否为空…

package com.warehouse.util;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * @Author 侯国威
 * @邮箱 1045077189@qq.com
 * @data 2021/9/6 21:56
 */
public class MultipartFileTest  implements MultipartFile {

//    获取文件名
    @Override
    public String getName() {
        return null;
    }
//   获取原始名称
    @Override
    public String getOriginalFilename() {
        return null;
    }

//    获取类型
    @Override
    public String getContentType() {
        return null;
    }
// 是否是空的
    @Override
    public boolean isEmpty() {
        return false;
    }
// 获取文件大小
    @Override
    public long getSize() {
        return 0;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return new byte[0];
    }
// 获取输入流
    @Override
    public InputStream getInputStream() throws IOException {
        return null;
    }
// 写入文件  这里往往是写入的文件路径
    @Override
    public void transferTo(File file) throws IOException, IllegalStateException {

    }
}

具体怎么使用呢 应用场景 spring springmvc mysql
图解SSM
从视图解析->controller控制层接收到前端的视图->然后再到Service接口下的Impl业务处理层,在这里我们将业务逻辑写入到controller中。
接下来如下
1、controller层
MultipartFile (file) 括号里面的字符串名称必须和前端传来的name相同,否则获取不到文件信息,

@RequestMapping("/add")
    @ResponseBody
    public ReturnData addFileInputPage(FileManage fileManage, MultipartFile file,
     HttpServletRequest request) throws IOException {
    //   这里是获取到session中的用户信息
        TableUser tableUser = (TableUser) session.getAttribute(Consts.SYS_USER_INFO);
//      路径
        String realPath = request.getSession().getServletContext().getRealPath("/upload/file");
//        原始名称
        String oldName = file.getOriginalFilename();
//        文件类型
        String fileType = file.getContentType();
//        文件大小
        int size = (int) (file.getSize() / 1024.0 / 1024.0 * 100);
        // 除以100还原 保留了2位小数
        String fileSize = (size / 100.0) + "M";

        fileManage.setFilePath(realPath);

        fileManage.setFileType(fileType);

        fileManage.setOldName(oldName);

        fileManage.setFileSize(fileSize);

        fileManage.setUploadTime(new Date());

        fileManage.setUserId(tableUser.getId());

        file.transferTo(new File(realPath));

        return fileManageService.insertSelective(fileManage);

2、service层
大家可以注意到 我这里为什么是ReturenData?而不是String实际上我是将这个ReturnData 让他继承HashMap<String, Object> 并且进行封装,返回的数据是Map,主要是与异步交互使用。他如果i>0则返回sueess()这个方法。

    @Override
    public ReturnData insertSelective(FileManage record) {
        int i = fileManageMapper.insertSelective(record);
        return UpdateOrInsertResultDeal.dealWith(i);
    }

提示:以下是本篇文章正文内容,下面案例可供参考

二、前端

<div class="layui-input-inline layui-show-xs-block">
          <button type="button" class="layui-btn" data-type="import" id="importData"><i class="layui-icon"></i>上传文件
 </div>
    upload.render({
            elem: "#importData",//导入id  这里的ID就是 上面的button的ID
            url: modleName + "/add",  // 地址
            accept: "file",  文件的形式
            exts: 'xls|xlsx|xlsm|xlt|txt|jpg|png',   这里可以继续延申比如 PDF、text、docx等
            contentType: false,
            /**
             * 必须false才会避开jQuery对 formdata 的默认处理
             * XMLHttpRequest会对 formdata 进行正确的处理
             */
            processData: false,
            before: function (obj) {
                layer.msg('文件上传中...', {
                    icon: 16,
                    shade: 0.01,
                    time: 0
                })
            },
            done: function (res) {
                //关闭上传提示窗口
                if (res.code === 200) {

                    layer.msg('导入成功', {icon: 1, shade: 0.4, time: 1500});
                    tableIns.reload();

                } else {
                    layer.msg('导入失败', {icon: 1, shade: 0.4, time: 1500});

                }
            }
        });

三、实现效果

在这里插入图片描述
插入成功的状态
在这里插入图片描述

三、使用的库文件

1.引入库

代码如下(示例):

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

总结

提示:这里对文章进行总结:
其实很简单,特别注意下如果说有什么不会的,希望大家去参阅官方的文档,我这里主要是layui-UI的API
以及java SE文档
需要源码的小伙私信,请打击多多专注!!!!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值