云社区 博客 博客详情

文件上传和下载

墨小岚.,/~!@ 发表于 2020-03-22 19:34:12 2020-03-22
0
0

【摘要】 3月,跳不动了?>>>用于存储文件信息的表名CREATETABLE`visit_file`( `id`varchar(32)COLLATEutf8_binNOTNULL, `visit_id`varchar(32)COLLATEutf8_binNOTNULL, `file_name`varchar(200)COLLATEutf8_binNOTNULL, `file_new_na...

3 月,跳不动了?>>>

用于存储文件信息的表名
CREATE TABLE `visit_file` (
  `id` varchar(32) COLLATE utf8_bin NOT NULL,
  `visit_id` varchar(32) COLLATE utf8_bin NOT NULL,
  `file_name` varchar(200) COLLATE utf8_bin NOT NULL,
  `file_new_name` varchar(200) COLLATE utf8_bin NOT NULL,
  `save_path` varchar(200) COLLATE utf8_bin NOT NULL,
  `file_suffix` varchar(10) COLLATE utf8_bin NOT NULL,
  `file_size` varchar(200) COLLATE utf8_bin NOT NULL,
  `fcd` date NOT NULL,
  `fcu` varchar(10) COLLATE utf8_bin NOT NULL,
  `lcd` date NOT NULL,
  `lcu` varchar(10) COLLATE utf8_bin NOT NULL,
  `is_del` varchar(2) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


开发环境实在idea中,使用的技术是 springBoot

import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author WANGLAIKUAN
 */
@Component
@ConfigurationProperties(prefix = "sales.files")
@Data
public class FileProperties {
    private String imageBasePath;
    private String uploadPath;
    private String uploadNewPath;


}


上传图片封装的方法

    public void imageUpload(MultipartFile multipartFile, VisitFile visitFile){

        List list = new ArrayList<>();
        list.add("gif");
        list.add("jpg");
        list.add("jpeg");
        list.add("png");
//        1.源图片上传大小
        long size = multipartFile.getSize();
            visitFile.setFileSize(size+"");
//            2.获取文件上传的文件名
        String fileName = multipartFile.getOriginalFilename();
        visitFile.setFileName(fileName);
//        3.获取源图片上传类型FilenameUtils(工具类).getExtension(文件名)
        String fileSuffix = FilenameUtils.getExtension(fileName);
//        4.判断图片上传类型是不是PDF格式
        if(!list.contains(fileSuffix)){
            log.error("图片上传格式错误!图片格式为: "+fileSuffix);
            return;
        }
        visitFile.setFileSuffix(fileSuffix);
//        5.生成新的上传图片名
        String fileNewName=System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."));
//        String fileNewName=System.currentTimeMillis()+fileSuffix;
//        6.生成新的图片上传名,数字加后缀
        visitFile.setFileNewName(fileNewName);
//        7,生成服务器上上传的新的图片名称
        fileName=fileName.substring(0,fileName.lastIndexOf("."))+"_"+fileNewName;
        log.info("服务器上传图片的名称为:"+fileName);
//        8.给图片上传相对路径赋值
        visitFile.setSavePath(fileName);

//        9.创建服务器图片上传文件夹

        String rootPath = fileProperties.getImageBasePath();
        File fileFolder = new File(rootPath);
        if (!fileFolder.exists()){
            fileFolder.mkdirs();
        }
        log.info("获取图片上传路径:"+rootPath);
        InputStream in =null;
        OutputStream os =null;
        File file = new File(fileFolder, fileName);

            try {
                if (!file.exists()){
                file.createNewFile();
                }

                in=  multipartFile.getInputStream();


                os=new FileOutputStream(file);
                byte[] bytes = new byte[1024];
                int i=in.read(bytes);
                while (i!=-1){
                    os.write(bytes,0,i);
                    i=in.read(bytes);
                }
            } catch (IOException e) {
                log.error("图片上传失败");

            }finally {
                if (in!=null){
                    try {
                        in.close();
                    }catch (IOException e){
                        log.error("文件关闭流异常:"+e);
                    }
                }
                if(os!=null){
                    try {
                        os.close();
                    }catch (IOException e){
                        log.error("文件关闭流异常:"+e);
                    }
                }
            }


    }

}

public class FileImageController {

    @Autowired
    private FileProperties fileProperties;

    @Autowired
    private FileImageMapper fileImageMapper;

@PostMapping("/file")
    public  void  uploadImage(MultipartFile[] multipartFiles,@RequestParam("id") String id) throws Exception {
        log.info("活动图片上传开始:图片为:"+ multipartFiles);
        if (multipartFiles==null || multipartFiles.length==0){
            return;

        }
        if (multipartFiles.length>5){
            log.error("图片上传不能超过5张,图片上传的数量为:"+multipartFiles.length);
            return;
        }
        String filePath="";
        try{
            VisitFile visitFile = new VisitFile();
            visitFile.setVisitId(id);
            for (int i=0;i                 imageUpload(multipartFiles[i],visitFile);
                visitFile.setId(UUID.randomUUID().toString().replace("-",""));
                visitFile.setFcu("276");
                visitFile.setFcd(new Date());
                visitFile.setLcu("276L");
                visitFile.setLcd(new Date());
                visitFile.setIsDel("N");
//                插入数据库
                fileImageMapper.insert(visitFile);
            }


        }catch (Exception e){
            throw  new Exception(e.getMessage());

        }


    }


    @GetMapping("look")
    public void  downLoadFile(@Param("id") String id, HttpServletResponse response){
    if (StringUtils.isEmpty(id)){
        log.error("id不能为空"+id);
            }
    String filePath="";
    try{
        log.info("文件id"+id);
        VisitFile visitFile = new VisitFile();
        visitFile.setId(id);
        VisitFile visitFile1 = fileImageMapper.selectByPrimaryKey(visitFile);

        if (null==visitFile1){
            log.error("访问后台获取的文件不存在");
        }
        response.setContentType("charset=utf-8");
//        使用图片的时候回报未能加载到PDF文档
//        response.setContentType("application/pdf");
         response.setContentType("Content-Type;image/jpeg");

        response.setHeader("Content-Disposition","attachment:filename="+ URLEncoder.encode(visitFile1.getFileName(),"utf-8"));
//        ServletOutputStream out = response.getOutputStream();
        filePath=fileProperties.getImageBasePath()+visitFile1.getSavePath();
        log.info("filePath"+filePath);
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
        BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
//        InputStream in = new FileInputStream(new File(filePath));
//        response.setContentType("charset=utf-8");


        try{
            byte[] bytes = new byte[1024];
            int len=0;
            while ((len=bis.read(bytes))!=-1){
                bos.write(bytes,0,len);

            }
            bos.flush();
        }catch (Exception e){

            log.info("文件查看失败");
        }finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    log.error("文件关闭流异常:" + e);
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    log.error("文件关闭流异常:" + e);
                }
            }
        }

    }catch (Exception e){

        log.info("查看失败");
    }

    }
    
    
    
    
    
    
    
    
    package tk.mybatis.mapper.common.base.select;

import org.apache.ibatis.annotations.SelectProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.provider.base.BaseSelectProvider;

@RegisterMapper
public interface SelectByPrimaryKeyMapper {
    @SelectProvider(
        type = BaseSelectProvider.class,
        method = "dynamicSQL"
    )
    T selectByPrimaryKey(Object var1);
}


 

文章来源: www.oschina.net,作者:码农屌丝,版权归原作者所有,如需转载,请联系作者。

原文链接:https://my.oschina.net/u/3892666/blog/3208207

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:1.JVM中的五大内存区域划分详解及快速扫盲

下一篇:AfterShip 打造优秀的研发团队

评论 (0)


登录后可评论,请 登录注册

评论