文件上传下载

CREATE TABLE `note` (
  `id` varchar(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `sponsor` varchar(255) DEFAULT NULL,
  `solve` varchar(255) DEFAULT NULL,
  `is_assist` int DEFAULT NULL,
  `status` int DEFAULT NULL,
  `version` varchar(255) DEFAULT NULL,
  `desc` varchar(255) DEFAULT NULL,
  `solve_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `other` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `resource_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `entity_id` int NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `sftp_file` (
  `file_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '文件id',
  `file_name_up` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '文件名称',
  `file_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '上传文件名称',
  `file_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '文件类型',
  `file_size` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '文件大小 单位:B',
  `server_ip` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '文件服务器地址',
  `file_path` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '文件上传路径',
  `record_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '操作用户id',
  `create_time` datetime NOT NULL COMMENT '上传日期',
  PRIMARY KEY (`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='附件表'

层次结构

实体类

package com.fh.autocheck.entity;

import java.util.Date;
import java.util.List;
import java.util.UUID;

public class Note {

    String resourceName;

    Integer entityId;

    //唯一主键,用来约束文件相关情况
    private String id;

    private  String title;

    private  String type;

    private  String sponsor;

    private  String solve;

    private  Integer isAssist;

    private  Integer status;

    private  String  version;

    private  String  desc;

    private  String solveMethod;

    private  String other;

    private Date createTime;

    private Date updateTime;



    public Note() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public  String createId(){
        return UUID.randomUUID().toString().replace("-","");
    }
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getSponsor() {
        return sponsor;
    }

    public void setSponsor(String sponsor) {
        this.sponsor = sponsor;
    }

    public String getSolve() {
        return solve;
    }

    public void setSolve(String solve) {
        this.solve = solve;
    }

    public Integer getIsAssist() {
        return isAssist;
    }

    public void setIsAssist(Integer isAssist) {
        this.isAssist = isAssist;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getSolveMethod() {
        return solveMethod;
    }

    public void setSolveMethod(String solveMethod) {
        this.solveMethod = solveMethod;
    }

    public String getOther() {
        return other;
    }

    public void setOther(String other) {
        this.other = other;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getResourceName() {
        return resourceName;
    }

    public void setResourceName(String resourceName) {
        this.resourceName = resourceName;
    }

    public Integer getEntityId() {
        return entityId;
    }

    public void setEntityId(Integer entityId) {
        this.entityId = entityId;
    }
}

package com.fh.autocheck.entity;

import java.util.Date;
import java.util.UUID;

public class SftpFile {
    /**
     * 文件id
     */
    private String fileId;

    /**
     * 文件名称
     */
    private String fileNameUp;

    /**
     * 上传文件名称
     */
    private String fileName;

    /**
     * 文件类型
     */
    private String fileType;

    /**
     * 文件大小 B
     */
    private String fileSize;

    /**
     * 文件服务器地址
     */
    private String serverIp;

    /**
     * 文件上传路径
     */
    private String filePath;

    private String recordId;

    private Date createTime;


    public SftpFile() {
    }

    public static String createDbId() {

        return UUID.randomUUID().toString().replace("-","");
    }

    public String getFileId() {
        return fileId;
    }

    public void setFileId(String fileId) {
        this.fileId = fileId;
    }

    public String getFileNameUp() {
        return fileNameUp;
    }

    public void setFileNameUp(String fileNameUp) {
        this.fileNameUp = fileNameUp;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getFileType() {
        return fileType;
    }

    public void setFileType(String fileType) {
        this.fileType = fileType;
    }

    public String getFileSize() {
        return fileSize;
    }

    public void setFileSize(String fileSize) {
        this.fileSize = fileSize;
    }

    public String getServerIp() {
        return serverIp;
    }

    public void setServerIp(String serverIp) {
        this.serverIp = serverIp;
    }

    public String getFilePath() {
        return filePath;
    }

    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public String getRecordId() {
        return recordId;
    }

    public void setRecordId(String recordId) {
        this.recordId = recordId;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
package com.fh.autocheck.entity.Vo;

import com.fh.autocheck.entity.SftpFile;

import java.util.Date;
import java.util.List;
import java.util.UUID;

public class NoteVo {
    String resourceName;

    Integer entityId;

    //唯一主键,用来约束文件相关情况
    private String id;

    private  String title;

    private  String type;

    private  String sponsor;

    private  String solve;

    private  Integer isAssist;

    private  Integer status;

    private  String  version;

    private  String  desc;

    private  String solveMethod;

    private  String other;

    private Date createTime;

    private Date updateTime;

    private List<SftpFile> files;

    public List<SftpFile> getFiles() {
        return files;
    }

    public void setFiles(List<SftpFile> files) {
        this.files = files;
    }

    public NoteVo() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public  String createId(){
        return UUID.randomUUID().toString().replace("-","");
    }
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getSponsor() {
        return sponsor;
    }

    public void setSponsor(String sponsor) {
        this.sponsor = sponsor;
    }

    public String getSolve() {
        return solve;
    }

    public void setSolve(String solve) {
        this.solve = solve;
    }

    public Integer getIsAssist() {
        return isAssist;
    }

    public void setIsAssist(Integer isAssist) {
        this.isAssist = isAssist;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getSolveMethod() {
        return solveMethod;
    }

    public void setSolveMethod(String solveMethod) {
        this.solveMethod = solveMethod;
    }

    public String getOther() {
        return other;
    }

    public void setOther(String other) {
        this.other = other;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getResourceName() {
        return resourceName;
    }

    public void setResourceName(String resourceName) {
        this.resourceName = resourceName;
    }

    public Integer getEntityId() {
        return entityId;
    }

    public void setEntityId(Integer entityId) {
        this.entityId = entityId;
    }
}

service方法

package com.fh.autocheck.service.impl;

import com.fh.autocheck.dao.Filemapper;
import com.fh.autocheck.dao.NoteMapper;
import com.fh.autocheck.entity.Note;
import com.fh.autocheck.entity.SftpFile;
import com.fh.autocheck.entity.Vo.NoteVo;
import com.fh.autocheck.service.NoteService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class NoteServiceImpl implements NoteService {

    @Autowired
    NoteMapper noteMapper;

    @Autowired
    Filemapper fileMapper;

    public Map<String, Object>  getNotes(String resourceName,Integer entityId){
        List<NoteVo> noteVos = new ArrayList<>();
        List<Note> notes = noteMapper.findBypkey(resourceName, entityId);
        for (Note note :
                notes) {
            NoteVo noteVo = new NoteVo();
            List<SftpFile> files = fileMapper.findById(note.getId());
            BeanUtils.copyProperties(note, noteVo);
            noteVo.setFiles(files);
            noteVos.add(noteVo);
        }

        HashMap<String, Object>resultMap = new HashMap<>();
        resultMap.put("note", noteVos);
        return resultMap;
    }

}

mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fh.autocheck.dao.Filemapper">

    <!--批量添加,附件表-->
    <insert id="batchInsertFile" parameterType="java.util.List">
        INSERT into sftp_file
        (file_id,file_name_up,file_name,file_type,file_size,server_ip,file_path,record_id,create_time)
        VALUES
        <foreach item="item" collection="sftpFileList" index="index" separator=",">
            (#{item.fileId,jdbcType=VARCHAR},
            #{item.fileNameUp,jdbcType=VARCHAR},
            #{item.fileName,jdbcType=VARCHAR},
            #{item.fileType,jdbcType=VARCHAR},
            #{item.fileSize,jdbcType=VARCHAR},
            #{item.serverIp,jdbcType=VARCHAR},
            #{item.filePath,jdbcType=VARCHAR},
            #{item.recordId,jdbcType=VARCHAR},
            NOW())
        </foreach>
    </insert>

    <!--根据文件ID批量查询文件信息-->
    <select id="getFilesByIds" resultType="com.fh.autocheck.entity.SftpFile">
        select
        file_id as fileId,file_name_up as fileNameUp,file_name as fileName,
        file_type as fileType,file_size as fileSize,server_ip as serverIp,
        file_path as filePath,user_id asuserId,create_time as createTime
        from sftp_file
        where
        <foreach collection="fileIdList" item="fileId" index="index" open=" file_id IN (" close=")" separator=",">
            #{fileId,jdbcType=VARCHAR}
        </foreach>
        order by
        CREATE_TIME DESC
    </select>

    <select id="findById" resultType="com.fh.autocheck.entity.SftpFile">
        select
        file_id as fileId,file_name_up as fileNameUp,file_name as fileName,
        file_type as fileType,file_size as fileSize,server_ip as serverIp,
        file_path as filePath,record_id as recordId,create_time as createTime
        from sftp_file
        where
        record_id=#{recordId}
    </select>

    <select id="findByFileId" resultType="com.fh.autocheck.entity.SftpFile">
            select
            file_name_up,file_path ,  file_name , file_type
            from sftp_file
            where
            file_id = #{fileId}
    </select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fh.autocheck.dao.NoteMapper">

    <!--批量添加,附件表-->
    <insert id="insertNote" parameterType="com.fh.autocheck.entity.Note">
        INSERT into note
        (resource_name,entity_id,`id`,title,`type`,sponsor,solve,is_assist,status,version,`desc`,solve_method,`other`,create_time,update_time)
        VALUES
           (
            #{resourceName},
            #{entityId},
            #{id},
            #{title},
            #{type},
            #{sponsor},
            #{solve},
            #{isAssist},
            #{status},
            #{version},
            #{desc},
            #{solveMethod},
            #{other},
            #{createTime},
            #{updateTime}
            )

    </insert>


    <select id="findBypkey" resultType="com.fh.autocheck.entity.Note">
        select
            *
        from note
        where
        resource_name=#{resourceName}  and entity_id = #{entityId}
        order by
        create_time DESC
    </select>

    <update id="updateNote">
        update note set title = #{title},`type` = #{type} ,sponsor = #{sponsor},solve = #{solve},is_assist = {isAssist},status = #{status},version = #{version},`desc` = #{desc},solve_method = #{solveMethod},`other`= #{other},update_time = #{updateTime})
        where  id=#{id}
    </update>

</mapper>

业务逻辑代码

package com.fh.autocheck.controller;


import com.fh.autocheck.dao.Filemapper;
import com.fh.autocheck.dao.NoteMapper;
import com.fh.autocheck.entity.Note;
import com.fh.autocheck.entity.SftpFile;
import com.fh.autocheck.entity.Vo.NoteVo;
import com.fh.autocheck.service.NoteService;
import com.fh.autocheck.util.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
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.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;
import java.util.*;

@Api(value = "BatchFilesController", tags = {"文件(附件)信息表"})
@Log4j
@Controller
@RequestMapping("/batchFiles")
public class BatchFilesController {
    @Autowired
    private Filemapper fileMapper;

    @Autowired
    private NoteMapper noteMapper;


    @Autowired
    private NoteService noteService;

    /**
     * @param note  运营记录
     * @param files 文件对象
     * @return java.lang.String
     * @description TODO 批量文件上传
     * @author WangTianLiang
     * @date 2021/5/21
     */
    @ApiOperation("批量文件上传")
    @RequestMapping(value = "batchUploadFile", method = RequestMethod.POST)
    @ResponseBody
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> batchUploadFile(@RequestParam("files") MultipartFile[] files, Note note, String resourceName, String entityId) {
        Map<String, Object> mapData = new HashMap<>();

        //拿到note,生成唯一id
        note.setId(note.createId());

        note.setCreateTime(new Date());

        note.setUpdateTime(new Date());
        //生成运营记录
        int record = noteMapper.insertNote(note);
        if (record == 0) {
            mapData.put("data", "失败");

            return mapData;
        }

        //step 1: 判断校验文件流是否有文件
        if (files == null || files.length <= 0) {
            mapData.put("success", false);//false:成功,false:失败
            mapData.put("msg", "系统未检测到文件流");
            return mapData;
        }
        //step 2: 创建List集合用于存储文件对象
        List<SftpFile> sftpFileList = new ArrayList<>();
        //step 3: 创建List集合用于存储文件ID,返给前端
        List<String> sftpFileIdList = new ArrayList<>();

        for (MultipartFile file : files) {
            //step 4: 封装实例对象
            SftpFile sftpFile = new SftpFile();
            String fileId = SftpFile.createDbId();//随机生产主键ID
            sftpFile.setFileId(fileId);//文件id
            sftpFile.setRecordId(note.getId());//文件对应记录唯一主键
            sftpFile.setCreateTime(new Date());//创建时间

            // 获取原始名字
            String fileNameUp = file.getOriginalFilename();
            sftpFile.setFileNameUp(fileNameUp);//上传文件名称

            sftpFile.setFileName(fileId);//存储文件的名称

            // 获取后缀名
            String suffixType = fileNameUp.substring(fileNameUp.lastIndexOf(".") + 1);
            sftpFile.setFileType(suffixType);//文件类型

            //获得文件大小
            Float size = Float.parseFloat(String.valueOf(file.getSize())) / 1024;
            BigDecimal b = new BigDecimal(size);
            size = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
            sftpFile.setFileSize(size.toString());//文件大小(字节单位)

            // 文件保存路径 你还可以在拼接一层路径,例如 20210521 每天上传的都会生成一个新的文件加里
            String filePath = "E://image//";
            sftpFile.setFilePath(filePath);//文件上传路径

            // 文件重命名,防止重复
            String filePathName = filePath + fileId + "." + sftpFile.getFileType();
            //本机ip 静态方法获取InetAddress对象。
            InetAddress ia = null;
            try {
                ia = ia.getLocalHost();// 获取本地主机
                sftpFile.setServerIp(ia.getHostAddress());
            } catch (UnknownHostException e) {
                log.error("文件传输服务器失败:", e);
            }
            //step 5: 创建文件对象
            File dest = new File(filePathName);
            //step 6: 判断路径是否存在,如果不存在则创建
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }

            //step 7: 文件存在,返回
            if (dest.exists()) {
                mapData.put("success", false);//false:成功,false:失败
                mapData.put("msg", "文件已存在,请重新上传" + fileNameUp);
                return mapData;
            }
            try {
                //step 8: 保存到服务器中
                file.transferTo(dest);
                //step 9: 将生产的文件ID 和文件对象分别存入对应的集合
                sftpFileIdList.add(fileId);
                sftpFileList.add(sftpFile);
            } catch (Exception e) {
                log.error("文件传输服务器失败:", e);
            }
        }
        //判断校验存储文件对象集合是否为空、集合长度是否大于0
        if (sftpFileList != null && sftpFileList.size() > 0) {
            //step 10: 批量添加文件对象
            int i = fileMapper.batchInsertFile(sftpFileList);
            //step 11: 判断是否添加成功  存储文件对象的集合长度是否等于数据库执行的条数
            if (sftpFileList.size() == i) {
                log.info("文件上传成功");//false:成功,false:失败
            }
        }
        return mapData;
    }

    @ApiOperation("获取该note下的所有信息")
    @RequestMapping(value = "note", method = RequestMethod.GET)
    @ResponseBody
    public R notes(String resourceName, Integer entityId) {
        Map<String, Object> notes = noteService.getNotes(resourceName, entityId);
        return new R(200, "成功", notes);
    }

    @RequestMapping("/downloadFile")
    public ResponseEntity<byte[]> download(HttpServletRequest request, String fileId) throws IOException {
        SftpFile sfile = fileMapper.findByFileId(fileId);
        String filePath = sfile.getFilePath() + sfile.getFileName() + "." + sfile.getFileType();
        File file = new File(filePath);
        byte[] body = null;
        InputStream is = new FileInputStream(file);
        body = new byte[is.available()];
        is.read(body);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attchement;filename=" + sfile.getFileNameUp());
        HttpStatus statusCode = HttpStatus.OK;
        ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
        return entity;
    }

    /**
     * @param fileId     想要下载的文件的id
     * @param response
     * @功能描述 下载文件:
     */
    @RequestMapping("/download")
    public void download(String fileId, HttpServletResponse response) {
        try {
            // path是指想要下载的文件的路径
            SftpFile sfile = fileMapper.findByFileId(fileId);
            String filePath = sfile.getFilePath() + sfile.getFileName() + "." + sfile.getFileType();
            File file = new File(filePath);
            log.info(file.getPath());
            // 获取文件名
            String filename = file.getName();
            // 获取文件后缀名
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
            log.info("文件后缀名:" + ext);

            // 将文件写入输入流
            FileInputStream fileInputStream = new FileInputStream(file);
            InputStream fis = new BufferedInputStream(fileInputStream);
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();

            // 清空response
            response.reset();
            // 设置response的Header
            response.setCharacterEncoding("UTF-8");
            //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
            //attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
            // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
            response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
            // 告知浏览器文件的大小
            response.addHeader("Content-Length", "" + file.length());
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            outputStream.write(buffer);
            outputStream.flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


    @Transactional
    @RequestMapping(value = "updatenote" ,method = RequestMethod.PUT)
    public R updateNote(Note note,MultipartFile[] files){

        List<SftpFile> sftpFileList = new ArrayList<>();

        //设置更新时间
        note.setUpdateTime(new Date());

        //插入数据
        int i = noteMapper.updateNote(note);
        if (i == 1) {
            log.error("修改失败");
            return R.error();
        }

        if(files != null){
            for (MultipartFile file : files) {
                //step 4: 封装实例对象
                SftpFile sftpFile = new SftpFile();
                String fileId = SftpFile.createDbId();//随机生产主键ID
                sftpFile.setFileId(fileId);//文件id
                sftpFile.setRecordId(note.getId());//文件对应记录唯一主键
                // 获取原始名字
                String fileNameUp = file.getOriginalFilename();
                sftpFile.setFileNameUp(fileNameUp);//上传文件名称

                sftpFile.setFileName(fileId);//存储文件的名称

                // 获取后缀名
                String suffixType = fileNameUp.substring(fileNameUp.lastIndexOf(".") + 1);
                sftpFile.setFileType(suffixType);//文件类型

                //获得文件大小
                Float size = Float.parseFloat(String.valueOf(file.getSize())) / 1024;
                BigDecimal b = new BigDecimal(size);
                size = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
                sftpFile.setFileSize(size.toString());//文件大小(字节单位)

                // 文件保存路径 你还可以在拼接一层路径,例如 20210521 每天上传的都会生成一个新的文件加里
                String filePath = "E://image//";
                sftpFile.setFilePath(filePath);//文件上传路径

                // 文件重命名,防止重复
                String filePathName = filePath + fileId + "." + sftpFile.getFileType();
                //本机ip 静态方法获取InetAddress对象。
                InetAddress ia = null;
                try {
                    ia = ia.getLocalHost();// 获取本地主机
                    sftpFile.setServerIp(ia.getHostAddress());
                } catch (UnknownHostException e) {
                    log.error("文件传输服务器失败:", e);
                }
                //step 5: 创建文件对象
                File dest = new File(filePathName);
                //step 6: 判断路径是否存在,如果不存在则创建
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdirs();
                }

                //step 7: 文件存在,返回
                if (dest.exists()) {

                    return R.error();
                }
                try {
                    //step 8: 保存到服务器中
                    file.transferTo(dest);
                    sftpFileList.add(sftpFile);
                } catch (Exception e) {
                    log.error("文件传输服务器失败:", e);
                }
            }
            //将文件信息批量插入数据库中
            if (sftpFileList != null && sftpFileList.size() > 0) {
                //step 10: 批量添加文件对象
                int j = fileMapper.batchInsertFile(sftpFileList);
                //step 11: 判断是否添加成功  存储文件对象的集合长度是否等于数据库执行的条数
                if (sftpFileList.size() == j) {
                    log.info("文件上传成功");//false:成功,false:失败
                }
            }
        }

        //将数据回显
        Map<String, Object> notes = noteService.getNotes(note.getResourceName(), note.getEntityId());
        return new R(200, "成功", notes);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值