zoukankan      html  css  js  c++  java
  • Atitit 文件上传功能的实现 图片 视频 目录 1. 上传原理 1 1.1. http post编码 multipart / formdata 1 1.2. 临时文件模式 最简单 2 1.3

    Atitit 文件上传功能的实现 图片 视频

     

    目录

    1. 上传原理 1

    1.1. http post编码 multipart / form-data 1

    1.2. 临时文件模式  最简单 2

    1.3. 字节数组模式  简单 2

    1.4. Stream模式 教复杂,但适合大文件 2

    2. 前段实现 2

    2.1. Form提交 2

    2.2. Ifram模式  vs h5 formdata模式 3

    3. Springboot实现 3

    4. Springmvc实现方式 3

    4.1.   * 通过流的方式上传文件 3

    4.2.      * 采用file.Transto 来保存上传的文件  简单 3

    4.3.    *采用spring提供的 CommonsMutipartResolver (多部分解析器   方法  复杂但灵活 4

    5. Apache的开源工具:common-fileupload 4

    6. 其他语言的实现 4

    6.1. node.js  multer库 4

    6.2. Php的实现 5

    7. ref 5

     

     

    1. 上传原理
      1. http post编码 multipart / form-data

      1. 临时文件模式  最简单 

    Php用的这种模式,不支持stream的语言可使用此模式

    Java没有暂时貌似没有框架使用此模式,性能较差,因为复制了俩次

      1.  字节数组模式  简单

    这个是 字节数组byte[] 模式,适合中小文件,大文件可能会爆内存不足,因为他是全部读取到内存模式的

      1. Stream模式 教复杂,但适合大文件

    Java与net实现

    得到一个类似MultipartHttpServletRequest对象,或  MultipartFile 

    得到里面的文件stream,

    输出到文件

     

    1. 前段实现 
      1. Form提交

     文件上传接收,

    这个是更加简单的模式字节数组byte[] 模式。。。Stream模式较为复杂

    MultipartHttpServletRequest  和MultipartFile 的类关系如下

    MultipartHttpServletRequest multiReq

         MultipartFile file = multiReq.getFile("file");

      1. Ifram模式  vs h5 formdata模式

     

    1. Springboot实现

     

     @RequestMapping(value="/testUpload",method=RequestMethod.POST)  

        public void testUploadFile(HttpServletRequest req,MultipartHttpServletRequest multiReq) throws IOException{  

         

            FileInputStream fsInputStream=(FileInputStream) multiReq.getFile("file").getInputStream();  

            FileOutputStream fileOutputStream = new FileOutputStream(new File("d://upload.jpg"));

    StreamUtils.copy(fsInputStream, fileOutputStream); 

    fileOutputStream.close();

         

        }

    1. Springmvc实现方式
      1.   * 通过流的方式上传文件  

     

     

      1.      * 采用file.Transto 来保存上传的文件  简单

     

     

      1.    *采用spring提供的 CommonsMutipartResolver (多部分解析器   方法  复杂但灵活

         */

        @RequestMapping("springUpload")

        public String  springUpload(HttpServletRequest request) throws IllegalStateException, IOException

        {

             long  startTime=System.currentTimeMillis();

             //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)

            CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(

                    request.getSession().getServletContext());

     

    1. Apache的开源工具:common-fileupload
    2. 其他语言的实现 
      1.  node.js  multer

     

          1. multer

    Multer是一个用于处理multipart / form-data的node.js中间件,主要用于上传文件。它构建在busboy基础上以提高效率。点击 这里 阅读更多关于multer包。

    开始使用依赖关系

    你可以按如下所示创建依赖关系的实例。

    var Express = require('express');var multer = require('multer');var bodyParser = require('body-parser');var app = Express();

    app.use(bodyParser.json());

    然后,创建说明应该在哪里以及如何保存文件/图像的storage。

    var Storage = multer.diskStorage({

        destination: function (req, file, callback) {

            callback(null, "./Images");

        },

        filename: function (req, file, callback) {

            callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);

        }

    });

    每个文件包含以下信息:

      1. Php的实现

    保存被上传的文件

    上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

    这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

     

        move_uploaded_file($_FILES["file"]["tmp_name"],      "upload/" . $_FILES["file"]["name"]);

     

    1. ref

    SpringBoot实现文件上传功能 - 知乐 - 博客园.html

    SpringBoot实现文件上传功能 - 知乐 - 博客园.html

  • 相关阅读:
    4K
    4J
    4C
    I2C总线的仲裁机制
    Linux C中strcpy , strncpy , strlcpy 的区别
    Linux下的USB总线驱动(一)
    C/C++ 语言中的表达式求值
    const变量通过指针修改问题
    关于协议栈XDATA,内存溢出的小结
    Ubuntu安装ssh,及失败解决方案
  • 原文地址:https://www.cnblogs.com/attilax/p/15197470.html
Copyright © 2011-2022 走看看