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

原文地址:https://www.cnblogs.com/attilax/p/15197470.html