当前位置: 首页 > news >正文

提供网站建设方案服务企业网站的设计与实现

提供网站建设方案服务,企业网站的设计与实现,网站域名注册免费,购物网站前台功能点击上方蓝色字体#xff0c;关注我们上传文件是互联网中应用的场景之一,最典型的情况就是上传头像。文件上传主要是将文件通过IO流传输到服务器的某一个特定的文件夹下。Why-MultipartFile?解析源码#xff1a;public interface MultipartFile extends InputStreamSour… 点击上方蓝色字体关注我们上传文件是互联网中应用的场景之一,最典型的情况就是上传头像。文件上传主要是将文件通过IO流传输到服务器的某一个特定的文件夹下。Why-MultipartFile?解析源码public interface MultipartFile extends InputStreamSource {}public class MockMultipartFile extends Object implements MultipartFile implements MultipartFile, Serializable {}public class CommonsMultipartFile implements MultipartFile, Serializable {}public interface MultipartFile extends InputStreamSource {}通过源码可以看出 MultipartFile是一个接口这个接口的实现类有 CommonsMultipartFileMockMultipartFileMultipartFile继承InputStreamSource这个接口。MultipartFile--String getName() //返回表单中file文件参数name的名称。--String getOriginalFilename() // 文件原名称--String getContentType() //返回文件的内容类型。--boolean isEmpty() // 返回上传的文件是否为空即在多部分表单中没有选择任何文件或者所选文件没有内容。--long getSize() // 以字节为单位返回文件的大小。--byte[] getBytes() //将文件的内容作为字节数组返回。--InputStream getInputStream() //返回一个InputStream以从中读取文件的内容。--void transferTo(File dest) //将收到的文件传输到给定的目标文件。参考官网地址https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html开始搭建环境jdk1.8引入了spring-boot-starter-thymeleaf做页面模板引擎。 properties    java.version1.8java.versionpropertiesdependenciesdependency    groupIdorg.springframework.bootgroupId    artifactIdspring-boot-starter-webartifactIddependencydependency    groupIdorg.springframework.bootgroupId    artifactIdspring-boot-starter-thymeleafartifactIddependencydependency    groupIdorg.springframework.bootgroupId    artifactIdspring-boot-devtoolsartifactId    optionaltrueoptionaldependencydependenciesapplication.properties配置文件#thymeleafspring.thymeleaf.prefixclasspath:/templates/spring.thymeleaf.suffix.htmlspring.thymeleaf.modeLEGACYHTML5spring.thymeleaf.encodingUTF-8spring.thymeleaf.content-typetext/html# 禁用 thymeleaf 缓存spring.thymeleaf.cachefalse# 上传文件总的最大值spring.servlet.multipart.max-request-size10MB# 单个文件的最大值spring.servlet.multipart.max-file-size10MB# 是否支持批量上传   (默认值 true)spring.servlet.multipart.enabledtrue# 上传文件的临时目录 (一般情况下不用特意修改)spring.servlet.multipart.location# 文件大小阈值当大于这个阈值时将写入到磁盘否则存在内存中(默认值0 一般情况下不用特意修改)spring.servlet.multipart.file-size-threshold0# 判断是否要延迟解析文件(相当于懒加载一般情况下不用特意修改)spring.servlet.multipart.resolve-lazilyfalse常见问题1、表单method设置为post并将enctype设置为multipart/form-data。2、html中name值要和RequestParam(file)中的值保持一致。3、上传文件大小spring.http.multipart.max-file-size限制如果上传的文件超过设置的值会出现这个错误。这个错误是因为Spring文件上传重置问题这个异常是捕获不到需要Tomcat的默认连接器 maxSwallowSize 的参数。Connector port8080 protocolHTTP/1.1connectionTimeout20000redirectPort8443maxSwallowSize-1 /并在上传前实现Javascript检查文件大小。单文件上传单文件上传html页面htmlhtml langenhead   meta charsetUTF-8   title单文件上传titlehead body p单文件上传pform methodPOST enctypemultipart/form-data action/upload  文件input typefile namefile/      input typesubmit/formhr/body创建FileUploadController中的upload方法 (单文件上传)PostMapping(/upload)ResponseBodypublic String upload(RequestParam(file) MultipartFile file) {    //判断非空    if (file.isEmpty()) {        return 上传的文件不能为空;    }    try {        // 测试MultipartFile接口的各个方法        logger.info([文件类型ContentType] - [{}],file.getContentType());        logger.info([文件组件名称Name] - [{}],file.getName());        logger.info([文件原名称OriginalFileName] - [{}],file.getOriginalFilename());        logger.info([文件大小] - [{}],file.getSize());        logger.info(this.getClass().getName()图片路径path);        File f  new File(path);        // 如果不存在该路径就创建        if (!f.exists()) {            f.mkdir();        }        File dir  new File(path  file.getOriginalFilename());        // 文件写入        file.transferTo(dir);        return 上传单个文件成功;    } catch (Exception e) {        e.printStackTrace();        return 上传单个文件失败;    }}注这里除了transferTo方法也可以用字节流的方式上传文件但是字节流比较慢所以还是建议用transferTo下面这个方法是封装的一个用字节流写入文件的方法。  public void writeFile(MultipartFile file) {    try {        //获取输出流        OutputStream os  new FileOutputStream(path  file.getOriginalFilename());        //获取输入流 CommonsMultipartFile 中可以直接得到文件的流        InputStream is  file.getInputStream();        byte[] buffer  new byte[1024];        //判断输入流中的数据是否已经读完的标识        int length  0;        //循环将输入流读入到缓冲区当中(lenin.read(buffer))0就表示in里面还有数据        while((length  is.read(buffer))!-1){            //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath  \\  filename)当中            os.write(buffer, 0, length);        }        os.flush();        os.close();        is.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }}操作步骤单文件上传完成啦接下来就是多文件上传和文件下载。多文件上传html页面htmlhtml langenheadmeta charsetUTF-8title多文件上传titleheadbodyp多文件上传pform methodPOST enctypemultipart/form-data action/uploadBatch    p文件1input typefile namefile/p    p文件2input typefile namefile/p    pinput typesubmit value上传/pformbodyhtmluploadBatch方法PostMapping(/uploadBatch)ResponseBodypublic String uploadBatch(RequestParam(files) MultipartFile[] files) {    logger.info(文件名称 files );    if(files!nullfiles.length0){        String filePath  D:\\datafile\\;        for (MultipartFile mf : files) {            // 获取文件名称            String fileName  mf.getOriginalFilename();            // 获取文件后缀            String suffixName  fileName.substring(fileName.lastIndexOf(.));            // 重新生成文件名            fileName  UUID.randomUUID()suffixName;            if (mf.isEmpty()) {                return 文件名称 fileName 上传失败原因是文件为空!;            }            File dir  new File(filePath  fileName);            try {                // 写入文件                mf.transferTo(dir);                logger.info(文件名称 fileName 上传成功);            } catch (IOException e) {                logger.error(e.toString(), e);                return 文件名称 fileName 上传失败;            }        }        return 多文件上传成功;    }    return 上传文件不能为空;}操作步骤常见问题 The field file exceeds its maximum permitted size of 1048576 bytes.这个错误是由于springboot默认的文件大小是1MB造成的当上传文件超过1MB时就会报错。解决这个报错可以在application.properties中设置上传参数参数项是默认的我们设置最大上传文件大小不超过10MB再次上传会成功。文件下载方法GetMapping(/downloadfile)ResponseBodypublic String downloadFile(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {    String fileName  大话设计模式(带目录完整版).pdf;// 文件名    if (fileName ! null) {        //设置文件路径        File file  new File(D:\\datafile\\大话设计模式(带目录完整版).pdf);        //File file  new File(realPath , fileName);        if (file.exists()) {            response.setContentType(multipart/form-data);            response.setHeader(Content-Disposition, attachment; fileName  fileName ;filename*utf-8 URLEncoder.encode(fileName,UTF-8));            byte[] buffer  new byte[1024];            FileInputStream fis  null;            BufferedInputStream bis  null;            try {                fis  new FileInputStream(file);                bis  new BufferedInputStream(fis);                OutputStream os  response.getOutputStream();                int i  bis.read(buffer);                logger.info(i);                while (i ! -1) {                    os.write(buffer, 0, i);                    i  bis.read(buffer);                }                return 下载成功;            } catch (Exception e) {                e.printStackTrace();            } finally {                if (bis ! null) {                    try {                        bis.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }                if (fis ! null) {                    try {                        fis.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }    }    return 文件不存在;}在下载文件时中文文件名称会出现乱码问题需要设置一下即可。response.setHeader(Content-Disposition, attachment; fileName  fileName ;filename*utf-8 URLEncoder.encode(fileName,UTF-8));总结下载的html页面我就不复制啦一个Spring Boot 上传和下载文件的简单 Demo 就完成了感兴趣的同学可以将示例代码下载下来试试吧。GitHub:https://github.com/xiaonongOne/springboot-upload
http://www.zqtcl.cn/news/838580/

相关文章:

  • 长沙哪个公司做网站优化seo多少钱
  • html基础标签昆明做网站优化哪家好
  • 网站制作公司全域营销获客公司wordpress+用户组
  • 中文网站建设工具WordPress相册插件pro
  • 网站建设收获与不足站中站网站案例
  • 做运营必看的网站今天重大新闻2022
  • seo网站开发注意事项广州网站建设制作价格
  • 禅城南庄网站制作做门户网站的公司
  • 网站里的图片是怎么做的同泰公司网站公司查询
  • seo怎么做网站内容wordpress文件上传失败
  • zenm自己做网站wordpress 摄影 模板
  • 网站手机页面如何做微信小程序开发平台官网登录
  • 嘉兴外贸网站制作成都网络公司最新招聘
  • 租服务器发布网站团购网站单页模板
  • 西安网站建设运维凡客精选
  • 权威网站发布平台wordpress 如何安装
  • 没有官方网站怎么做seo优化军事新闻
  • 在招聘网站做销售技巧教育培训平台
  • 网站栏目 英文做网站在哪接单
  • 湖北网络营销网站市场营销策划案
  • 政务信息系统网站建设规范上海网站开发制作公司
  • 网站公众平台建设方案湖南seo优化报价
  • 企业网站制作公司discuz 转wordpress
  • 可信网站是什么意思应用软件开发平台
  • 上海市官方网站福建省中嘉建设工程有限公司网站
  • 备案之后怎样把 放到网站上大连建设网球场价格
  • dkp网站开发今天最新新闻
  • 山东省环保厅官方网站建设项目东莞寮步网站设计
  • 网站开发可能遇到的问题附近电脑培训班位置
  • 如何查看域名以前是做什么网站的网站索引下降如何解决