精华内容
下载资源
问答
  • SpringBoot文件上传.zip

    2019-09-13 09:47:39
    SpringBoot2.x实现单文件和多文件上传,适合初学者学习 。
  • springboot实现简单的上传与下载,源码 https://blog.csdn.net/weixin_43653670/article/details/112361435
  • springboot文件上传下载demo。
  • 基于springboot实现的文件下载上传.rar
  • 利用springboot实现用户注册登录,完善个人资料,文件上传文件下载,查看自己上传文件,还有后台管理功能。数据库文件在压缩包中。
  • 主要介绍了SpringBoot项目开发之Gzip压缩过程,本文给大家分享几种Gzip压缩方式,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 在开发中,前端上传文件流,在后台接口中通常是用MultipartFile类型的流格式接收,但是接收到的文件流往往不能满足我们的使用要求,我们需要转为File类型的文件流再去读取文件的宽高,大小等属性进行压缩上传等...

    在开发中,前端上传的文件流,在后台接口中通常是用MultipartFile类型的流格式接收,但是接收到的文件流往往不能满足我们的使用要求,我们需要转为File类型的文件流再去读取文件的宽高,大小等属性进行压缩上传等操作。本工具类为大家分享具体实现过程。接口规范:接收前端传的文件流,以及指定的目标压缩宽高,和压缩完需要上传到的指定目录。

    首先封装一个动态生成文件目录的文件路径工具类

    package com.demo.serverProvider.utils;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.apache.commons.lang.StringUtils;
    
    /**
     * 创建时间:2019年2月15日 上午10:05:00
     * 项目名称:server-provider
     * 类说明:文件上传路径生成
     * @author guobinhui
     * @since JDK 1.8.0_51
     */
    public class UploadPathUtils {
        /**
         * 图片最终生成的目录结构:host(服务器域名或主机IP)+文件根目录(虚拟目录)+商品图片目录+日期目录+图片名称(含后缀)
         * 图片最终存储结构示例:http://10.220.146.3/uploadBaseDir/productPic/20190215/abc.jpg
         * 注意:上传业务处理时需要根据服务器系统是windows还是linux配置物理路径和虚拟路径的映射
         */
    
        private final static SimpleDateFormat YYYY = new SimpleDateFormat("yyyy");
        private final static SimpleDateFormat MM = new SimpleDateFormat("MM");
        private final static SimpleDateFormat DD = new SimpleDateFormat("dd");
        
        private static String getYear(Date date) {
            if (null == date) {
                date = new Date();
            }
            return YYYY.format(date);
        }
    
        private static String getMM(Date date) {
            if (null == date) {
                date = new Date();
            }
            return MM.format(date);
        }
    
        private static String getDD(Date date) {
            if (null == date) {
                date = new Date();
            }
            return DD.format(date);
        }
        /*按照日期格式动态生成日期目录*/
        private static String getDateDir() {
            Date date = new Date();
            StringBuilder path = new StringBuilder("/");
            path.append(getYear(date));
            path.append(getMM(date));
            path.append(getDD(date));
            return path.toString();
        }
        /*动态生成图片上传完整目录(物理路径)*/
        public static  String getPicUploadDir(int width,int height){
            StringBuilder host =  new StringBuilder(ImageConstants.WIN_IMAGE_ROOT_DIR);
            host.append(ImageConstants.PRODUCT_PIC_DIR);
            host.append(getDateDir());
            String fullDir = generatorDir(host);
            return fullDir;
        }
        /*动态生成目录*/
        private static String generatorDir(StringBuilder dir){
            String fileDir = dir.toString();
            if (!StringUtils.isEmpty(fileDir)) {
                File file = new File(fileDir);
                if (!file.isDirectory() && !file.exists()) {
                    file.mkdirs();
                }
            }
            return fileDir;
        }
    }

    下面代码是具体的图片按照指定宽高压缩并上传的具体实现过程的封装 

    /**
     * 压缩图片按照指定的宽高压缩原图
     * @param img
     * @param width
     * @param height
     * @param outputDir
     */
     public static void thumbnail(MultipartFile file,int destWidth,int destHeight,String outputDir){
    	System.out.println("图片压缩开始");
    	long startTime = System.currentTimeMillis();
    	//得到上传时的原文件名
    	String originalFilename = file.getOriginalFilename();
    	//获取文件后缀名
    	String suffixName = originalFilename.substring(originalFilename.lastIndexOf("."));
    	//获取文件格式
    	String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
    	//获取uuid作为文件名
    	String name = UUID.randomUUID().toString().replaceAll("-", "");
    	String saveName = name + suffixName;
    	//存储目录
    	String picDir = UploadPathUtils.getPicUploadDir(destWidth,destHeight);
    	//图片存储全路径
    	String outputPath = picDir + '/' + saveName;
    	OutputStream fos = null;
    	try {
    	  //读取源图
    	  BufferedImage BI = ImageIO.read(file.getInputStream());
    	  double srcWidth = BI.getWidth(); // 源图宽度
    	  double srcHeight = BI.getHeight(); // 源图高度
    	  if ((int)srcWidth >= destWidth && (int)srcHeight >= destHeight) {
    
    		fos = new FileOutputStream(outputPath);
    		Image image = BI.getScaledInstance(destWidth, destHeight, Image.SCALE_SMOOTH);
     
    		BufferedImage tag = new BufferedImage(destWidth, destHeight,BufferedImage.TYPE_INT_RGB);
    		Graphics g = tag.getGraphics();
    		g.setColor(Color.RED);
    		g.drawImage(image, 0, 0, null); //绘制处理后的图
    		g.dispose();
    		ImageIO.write(tag,ext,fos);
    		System.out.println("图片压缩并存储结束");
    		long endTime = System.currentTimeMillis();
    		System.out.println("图片压缩共计耗时:" +(endTime-startTime)+"毫秒" );						
    	  }
    	} catch (FileNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}finally{
    	  if(fos != null){
    		try {
    			fos.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	  }
    	}
     }

    欢迎各位开发者朋友一起交流。笔者电话(微信):18629374628

    展开全文
  • java springboot 文件上传,多文件上传,例子程序
  • springboot文件上传,支持分片并发上传、断点续传、秒传,已经测试过1.2G的文件,最大支持理论无限制 博文链接:https://blog.csdn.net/haohao123nana/article/details/54692669
  • //生成压缩文件前先搜索客户地点下的所有药检文件 for (int i = 0; i < newList.size(); i++) { String new_store = (String) newList.get(i); System.out.println("第" + i &#...
  • ①导入压缩文件 MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; String sParamFileName = mRequest.getFileNames().hasNext() ? mRequest.getFileNames().next() : null; if...

    ①导入压缩文件 

    MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
    		String sParamFileName = mRequest.getFileNames().hasNext() ? mRequest.getFileNames().next() : null;
    		if (CMyString.isEmpty(sParamFileName)) {
    			return CtlStatus.failed().put("state", "文件不存在");
    		}
    		MultipartFile mFile = mRequest.getFile(sParamFileName);
    		String sLocalName = mFile.getOriginalFilename(); // 获取文件名
    
            /* 获取文件扩展名 */
    		String sExt = UploadFileUtil.getExt(sLocalName);
    		// 根据文件头获取的文件类型
    		/* 检查文件类型 */
    		String sHeaderExt = UploadFileUtil.getExtByFileHeader(mFile.getInputStream());
    		if ("zip".indexOf(sExt) < 0 || !sHeaderExt.equals("zip")) {
    			return CtlStatus.failed("只能上传zip文件!");
    		}
    		/* 文件是否为空 */
    		if (mFile.getSize() == 0) {
    			return CtlStatus.failed("上传文件内容不能为空");
    		}
    		String sFileName = UploadFileUtil.getNextFileName(sExt);// 获取系统可用文件名
    		/* 文件存储在容器中的绝对路径 */
    		String saveFilePathName = zipUploadPath;//自定义路径
    		/* 存储上传文件 */
    		fileMkdirs(new File(saveFilePathName));
    		saveFilePathName += sFileName;
    		File savefile = new File(saveFilePathName);
    		fileMkdirs(savefile);
    		FileOutputStream fos = new FileOutputStream(savefile);
    		fos.write(mFile.getBytes());
    		if (fos != null) {
    			fos.close();
    		} // 压缩文件上传完毕

     ②解压压缩文件到指定目录

    private void decompression(String zipPath, String aimPath) throws ZipException {
    		ZipFile zfile = new ZipFile(zipPath);
    		zfile.setFileNameCharset("UTF-8");// 在GBK系统中需要设置
    		if (!zfile.isValidZipFile()) {
    			throw new ZipException("压缩文件不合法,可能已经损坏!");
    		}
    		File file = new File(aimPath);
    		if (file.isDirectory() && !file.exists()) {
    			file.mkdirs();
    		}
    		zfile.extractAll(aimPath);
    	}

    ③判断目录或文件是否存在,没有则创建 

    private void fileMkdirs(File file) throws IOException {
    		if (file.isDirectory() && !file.exists()) {
    			file.mkdirs();
    		} else if (file.isFile() && !file.exists()) {
    			file.createNewFile();
    		}
    	}

     ④查找所有.html结尾的文件,并添加到集合htmls中记录

    public void findHtmlFile(String path) {
    		File dir = new File(path);
    		File[] subFiles = dir.listFiles(); // 获取e盘下所有的文件或文件夹对象
    		if (null != subFiles) {
    			for (File subFile : subFiles) {
    				if (subFile.isDirectory()) // 文件夹则递归寻找,后缀为html文件则输出名字
    					findHtmlFile(subFile.getAbsolutePath());
    				else if (subFile.isFile() && subFile.getName().endsWith(".html"))
    					htmls.add(subFile.getAbsolutePath());
    			}
    		}
    	}

    ⑤删除指定目录下的所有目录 

    public static boolean deleteDir(String path) {
    		File file = new File(path);
    		if (!file.exists()) {// 判断是否待删除目录是否存在
    			return false;
    		}
    		String[] content = file.list();// 取得当前目录下所有文件和文件夹
    		for (String name : content) {
    			File temp = new File(path, name);
    			if (temp.isDirectory()) {// 判断是否是目录
    				deleteDir(temp.getAbsolutePath());// 递归调用,删除目录里的内容
    				temp.delete();
    			} else {
    				temp.delete();// 删除文件
    			}
    		}
    		return true;
    	}
    

     

     

    展开全文
  • 我们在做项目开发的时候,会遇到一些问题。比如,需要上传图片但是图片比较多,我们一个一个上传肯定很慢。所以我们需要通过压缩文件上传,然后存起来。

    我们在做项目开发的时候,会遇到一些问题。比如,需要上传图片但是图片比较多,我们一个一个上传肯定很慢。所以我们需要通过压缩文件上传,然后存起来。

    我们用倒叙的方式来写。先写controller比如ZipController

     @Resource
        private ZipService zipService;
    
        /**
         * 上传二维码文件
         * @param qrCodeFile 二维码文件
         * @return 返回上传的结果
         */
        @ApiOperation(value = "上传二维码文件")
        @PostMapping("/uploadQrCodeFile")
        public Result uploadQrCodeFile(@RequestParam("file") MultipartFile qrCodeFile) throws Exception {
            zipService.uploadQrCodeFile(qrCodeFile);
            return Result.sendSuccess("上传成功");
        }

    接着就是写service 

    
    @Service
    public class ZipService {
    
    
        private static final Logger logger= LoggerFactory.getLogger(ZipService.class);
    
    
        public void uploadQrCodeFile(MultipartFile multipartFile)throws Exception {
            if (multipartFile.getSize() == 0
                    || multipartFile.getOriginalFilename() == null
                    || (multipartFile.getOriginalFilename() != null
                    && !multipartFile.getOriginalFilename().contains("."))) {
                ExceptionCast.cast(Result.sendFailure("文件格式不正确或文件为空!"));
            }
            // 1.先下载文件到本地
            String originalFilename = multipartFile.getOriginalFilename();
            String destPath = System.getProperty("user.dir") + File.separator + "qrCodeFile";
            FileUtil.writeFromStream(
                    multipartFile.getInputStream(), new File(destPath + File.separator + originalFilename));
    
            // 2.解压文件
            unzipAndSaveFileInfo(originalFilename, destPath);
            // 3.备份压缩文件,删除解压的目录
            FileUtils.copyFile(
                    new File(destPath + File.separator + originalFilename),
                    new File(destPath + File.separator + "backup" + File.separator + originalFilename));
            // 删除原来的上传的临时压缩包
            FileUtils.deleteQuietly(new File(destPath + File.separator + originalFilename));
            logger.info("文件上传成功,文件名为:{}", originalFilename);
    
    
        }
    
        /**
         * 解压和保存文件信息
         *
         * @param originalFilename 源文件名称
         * @param destPath         目标路径
         */
        private void unzipAndSaveFileInfo(String originalFilename, String destPath) throws IOException {
            if (StringUtils.isEmpty(originalFilename) || !originalFilename.contains(".")) {
                ExceptionCast.cast(Result.sendFailure("文件名错误!"));
            }
            // 压缩
            ZipUtil.unzip(
                    new File(destPath + File.separator + originalFilename),
                    new File(destPath),
                    Charset.forName("GBK"));
            // 遍历文件信息
            String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
            File[] files = FileUtil.ls(destPath + File.separator + fileName);
            if (files.length == 0) {
                ExceptionCast.cast(Result.sendFailure("上传文件为空!"));
            }
            String targetPath = destPath + File.separator + "images";
            for (File file : files) {
                // 复制文件到指定目录
                String saveFileName =
                        System.currentTimeMillis() + new SecureRandom().nextInt(100) + file.getName();
                FileUtils.copyFile(file, new File(targetPath + File.separator + saveFileName));
                logger.info("文件名称:"+file.getName());
                logger.info("文件所在目录地址:"+saveFileName);
                logger.info("文件所在目录地址:"+targetPath + File.separator + saveFileName);
            }
    
    
        }
    
    
    }
    

    这样核心代码就开发完了。但是你以为这样就结束了么。没有当我们的文件过大的时候也是需要配置的。在application.properties中添加upload的配置  

    #### upload begin  ###
    spring.servlet.multipart.enabled=true
    spring.servlet.multipart.max-request-size=10MB
    spring.servlet.multipart.max-file-size=10MB
    #### upload end  ###
    

    特别说明是:

    1:上传文件的名称不要是中文

    2:压缩文件是zip的。比如1.zip 并且压缩文件内部是文件夹,将所有图片等放入到文件夹里。然后压缩成zip文件。

    展开全文
  • 1,创建springboot项目 步骤就不用贴了。 2,导入相关的依赖: 以下是上传用到的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-...

    1,创建springboot项目

    步骤就不用贴了。

    2,导入相关的依赖:

    以下是上传用到的依赖

    <dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    3,创建HTML页面

    <html>
    <head>
        <title>测试</title>
    </head>
    <body>
    <form action="/uploadFile" enctype="multipart/form-data" method="post">
        <label>上传文件</label>
        <input type="file" name="file" multiple="multiple"/>
        <input type="submit" value="上传"/>
    </form>
    </body>
    </html>
    

    multiple=“multiple”

    这个标识是启用多文件上传的标识,如果只是单文件不加即可。

    4,接口controller

    以下代码全写在一个类里面了。每个方法都有注释。

    
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPReply;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * 上传文件
     *
     * @author YiDianDian
     */
    @RestController
    public class FtpController {
    
        @GetMapping("/uploadFile")
        public String uploadFile() {
            return "upload";
        }
    
        @RequestMapping(value = "/uploadFile")
        public String uploadFile(@RequestParam("file") MultipartFile[] files) throws IOException {
            List<File> lstFile = convertToFile(files);
    
            if (lstFile.isEmpty()) {
                return "上传失败,请选择文件";
            }
            String result = zipFiles(lstFile);
            return result;
        }
    
        /**
         * MultipartFile 转换为 File
         *
         * @param files
         * @return
         * @throws IOException
         */
        public List<File> convertToFile(MultipartFile[] files) throws IOException {
            List<File> lstFile = new ArrayList<>();
            if (files.length == 0) {
                return null;
            }
            int length = files.length;
            for (int i = 0; i < length; i++) {
                MultipartFile file = files[i];
                if (file.equals("") || file.getSize() <= 0) {
                    continue;
                } else {
                    InputStream ins;
                    ins = file.getInputStream();
                    File toFile = new File(file.getOriginalFilename());
                    inputStreamToFile(ins, toFile);
                    lstFile.add(toFile);
                    ins.close();
                }
            }
            return lstFile;
        }
    
        /**
         * 获取流文件
         *
         * @param ins
         * @param file
         */
        public static void inputStreamToFile(InputStream ins, File file) {
            try {
                OutputStream os = new FileOutputStream(file);
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                    os.write(buffer, 0, bytesRead);
                }
                os.close();
                ins.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 压缩文件
         *
         * @param srcFiles
         */
        public static String zipFiles(List<File> srcFiles) {
            Date date = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dxfFileName = formatter.format(date).replace(" ", "_").replace(":", "-");
            FTPClient ftpClient = new FTPClient();
    
            ZipOutputStream zipOut;
            FileInputStream fileInputStream;
    
            ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
            try {
                zipOut = new ZipOutputStream(byteOutStream);
    
                for (int i = 0; i < srcFiles.size(); i++) {
                    File file = srcFiles.get(i);
                    fileInputStream = new FileInputStream(file);
                    ZipEntry zipEntry = new ZipEntry(file.getName());
                    zipOut.putNextEntry(zipEntry);
                    int len;
                    byte[] buffer = new byte[1024];
                    while ((len = fileInputStream.read(buffer)) > 0) {
                        zipOut.write(buffer, 0, len);
                    }
                    fileInputStream.close();
                }
                zipOut.flush();
                zipOut.closeEntry();
                zipOut.close();
    
    
                InputStream inputStream = new ByteArrayInputStream(byteOutStream.toByteArray());
                boolean isUpload = connectionFTP(ftpClient, inputStream, dxfFileName);
                if (!isUpload) {
                    return null;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    ftpClient.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return dxfFileName;
        }
    
        /**
         * connection FTP
         *
         * @param ftpClient
         * @param zip
         * @param name
         * @return
         */
        public static boolean connectionFTP(FTPClient ftpClient, InputStream zip, String name) {
            boolean isUpload = false;
            try {
                ftpClient.connect("192.168.1.1");
                ftpClient.login("root", "root");
    
                //获取服务器返回的状态码
                int reply = ftpClient.getReplyCode();
                System.out.println(reply);
                //如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限下面有详细的解释。
                if (!FTPReply.isPositiveCompletion(reply)) {
                    ftpClient.disconnect();
                    return false;
                }
    
                //设置文件上传类型
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                isUpload = ftpClient.storeFile(name + ".zip", zip);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return isUpload;
        }
    }
    
    展开全文
  • 最近后端管理项目中需要用到用户一些证件图片进行表单文件上传 如果每个人的证件照片都非常大,对服务器资源将是一种浪费, 因为用户量也不是很大,所以也没对接第三方的OSS或者七牛云存储对象,就写个简单的图像...
  • 本demo主要是实现多文件上传下载功能,多文件打包下载,ztree树形下拉框,前端采用layui,内含mysql文件
  • 此案例场景为:从前端上传.zip 包,并进行解压至 docker容器内(服务部署使用了docker),然后容器内部解压目录与 宿主机(linux)nginx 目录的html 进行挂载,这样,就可以通过nginx 来访问上传解压出来的文件了, ...
  • * @Description:压缩上传 * @Author: duyaqiong * @Date: 2020/9/19 14:53 * @param imageFile * @param request **/ private ResultJson compress(MultipartFile imageFile, HttpServletRequest request, ...
  • 上传文件到本地,支持文本预览,图片预览,word文档预览,ppt文档预览,pdf文档预览,excel文档预览,压缩文件预览,多媒体文件预览,CAD文档预览
  • 请问layui+springboot如何实现上传zip包并读取里面的文件
  • springboot ajax文件上传

    2019-05-16 10:02:09
    前端 ... // 上传文件、request请求、保存目录(upload/规范文章管理)、路径前缀 String filePath = saveFile(file, request, UPLOAD_FILE_PATH, null); System.out.println(filePath); }*/ }
  • 压缩文件 zip | rar | jar | gzip 等 office文件 doc | docx | xlsx | xls | ppt | pptx 等 pdf文件 使用方法 拉取项目到本地 下载并安装openoffice,在项目application.yml文件中配置openoffice的安装路径 造一个...
  • 文件上传的一个小例子,springboot框架集成mybatis,数据库是mysql。采用分片上传,理论支持无限大小,实际测试过1.5G左右大小的文件
  • 下载压缩文件和下载其他文件的写法是一样的因为都是操作的字节流,通过IO流实现先将文件读取出来,然后再输入到浏览器。 @RestController public class DownloadController { @Autowired private ...
  • 0x01:HTTP压缩数据传输简介通过请求和响应头中增加Accept-Encoding:gzip Content-Encodin:gzip 确定客户端或服务器端是否支持压缩举例,客户端发...
  • 1. 上传单个图片 业务方法 @PostMapping("/upload") public AjaxResult uploadImg(@RequestParam("file") MultipartFile multipartFile) { AjaxResult result = certifInfoService.uploadImg(multipartFile); ...
  • springboot上传文件没有临时目录所以会报以上错误,需要在application配置文件中指定临时文件目录 server.tomcat.basedir=文件路径 如果配置了spring.http.multipart.location=文件路径,需要加上该路径。...
  • java文件快速压缩zip,支持加密功能,压缩时间较快!注意大于50G好像压缩有问题
  • 我们平时经常做的是上传文件上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小限制,post...
  • SpringBoot 上传文件工具类的编写

    千次阅读 2019-07-16 18:04:29
    1.新建一个自动配置文件custom.properties并编写 注意:服务器地址必须绝对路径,系统路径形式。 2.编写读取配置文件的工具类PropertiesUtil. package com.crawler.util; import java.io.IOException; import ...
  • 代码简单容懂。下载就可以运行。该列子包过了easypoi注解导出exel表格同时导出oss中的图片到exel表格中。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,496
精华内容 1,398
关键字:

springboot上传压缩文件

spring 订阅