MultipartFile实现单文件和多文件上传并带参数

什么是MultipartFile

MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。【来自百度知道】

 

方法总结
byte[]

getBytes()

以字节数组的形式返回文件的内容。

String
getContentType

返回文件的内容类型。

FileItem
getFileItem()

返回底层的org.apache.commons.fileupload.FileItem实例。

InputStream
getInputStream()

返回一个InputStream来读取文件的内容。

String
getName()

以multipart 表格的形式返回参数的名称。

String
getOriginalFileName()

返回客户机文件系统中的原始文件名。

long
getSize()

以字节的形式返回文件的大小

String
getStorageDescription()

返回multipart的内容和存储位置描述。


protected

boolean


isAvailable()

确定Multipart内容是否仍然可用。

boolean
isEmpty()

返回上传的文件是否为空,也就是说,在多部分表单中没有选择任何文件,或者选择的文件没有内容。

void
transferTo(File dest)

将接收到的文件传输到给定的目标文件。

单文件上传

前段HTML页面:

<form id="uploadForm" enctype = "multipart/form-data">
    <input type ="text" id ="uploadParams" vlaue = "uploadParams" />
    <input type = "file" name = "uploadfile" id = "uploadfile" />
    <input type = "button" id = "btnSave" onclick = "uploadSubmit" />
</form>

JS处理,需要引用JQuery.js

function uploadSubmit() {
    if (!$("#uploadfile").val()) {
        console.log("上传失败,文件是空的");
        return false;
    }
    var paramValue = $("#uploadParams").val();
    var formData = new FormData($("#uploadForm"));
    formData.append("paramValue",paramValue);
    $.ajax({
        url: "your server url",
        type: "post",
        data: formdata,
        success: function (result) {
            console.log("上传成功");
        },
        error: function (a, b, c) {
            console.log("失败了");
        },
        complete: function () {
            console.log("请求最后处理的方法");
        },
    })
}

FormData对象的使用

FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。

可以创建一个FormData对象,然后调用它的append()方法来添加字段。

后台Java处理:

@RequestMapping("upload")
public String upload(@RequestParam("uploadfile") MultipartFile file,@RequestParam("paramValue") String paramvalue,HttpServletRequest request){
    try{
        //得到文件"upload"的服务器路径
        String sysPath=request.getSession().getServletContext().getRealPath("upload");
        String fileName=file.getOriginalFilename();    //得到文件名
        File filePath=new File(sysPath,fielName);    //得到文件路径
        if(!filePath.getParentFile().exists()){    //判断服务器当前路径文件夹是否存在
            filePath.getParentFile().mkdirs();    //不存在则创建文件夹
        }
        BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(filePath));
        out.write(file.getBytes());
        out.flush();
        out.close();
    }catch(fileNotFoundException e){
        e.printStrackTrace();
        return "失败";
    }catch(IOException e){
        e.printStrackTrace();
        return "失败";
    }
}

BufferedOutputStream(缓冲输出流),继承于FilterOutputStrema,它的作用是为另一个输出流提供“缓冲功能”,该类实现一个缓冲输出流。通过设置这样的输出流,应用程序可以将字节写入底层输出流,而不必为写入的每个字节调用底层系统。

方法总结
修饰符和类型 方法和描述
void
flush()

刷新此缓冲输出流。

void
write(byte[] b,int off,int len)

从指定字节数组的偏移处开始将len字节写入此缓冲输出流。

void
write(int b)

将指定的字节写入此缓冲输出流。

多文件上传:

与单文件差别不大:前端多个<input type="file">,后端接收的时候方法参数使用数组:

@RequestParam("param") MultipartFile []  file

参考:Multipart 官方API

原文地址:https://www.cnblogs.com/KeithYang/p/10992283.html

时间: 2024-10-10 20:45:21

MultipartFile实现单文件和多文件上传并带参数的相关文章

SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

一.配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="-1&

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

django 基于form表单上传文件和基于ajax上传文件

一.基于form表单上传文件 1.html里是有一个input type="file" 和 'submit'的标签 2.vies.py def fileupload(request): if request.method == 'POST': print(request.POST) print(request.FILES) # from django.core.files.uploadedfile import InMemoryUploadedFile print(type(reque

Spring MVC 4使用Servlet 3 MultiPartConfigElement实现文件上传(带源码)

[本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看.源码下载地址在文章末尾.] [翻译 by 明明如月 QQ 605283073] 原文地址:http://websystique.com/springmvc/spring-mvc-4-file-upload-example-using-multipartconfigelement/ 上一篇:Spring MVC 4 使用常规的fileupload上传文件(带源码) 下一篇:Spring MVC 4 文件下载实例(带源码)

文件或资源的上传和下载

1.文件的上传 [1] 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. [2] 表单的设置 > 向服务器上传一个文件时,表单要使用post请求. > 表单的默认属性enctype="application/x-www-form-urlencoded" - 这个属性的意思是请求体中的内容将会使用URL编码 > 上传文件的表单enctype需要设置为 multipart/form-data - multi

PHP之文件的锁定、上传与下载

小结文件的锁定机制.上传和下载 1.文件锁定 现在都在讲究什么分布式.并发等,实际上文件的操作也是并发的,在网络环境下,多个用户在同一时刻访问页面,对同一服务器上的同一文件进行着读取,如果,这个用户刚好读到一半,另一个用户就写入了消息,那么前一个用户读到的就是错误数据,在数据库里面好像是称为脏数据,而如果某用户写到一半时,另一用户也对该文件进行写操作,那么就造成了写入数据的混乱和错误,因此才php有一个锁机制,类似于数据库的锁,当某用户在对文件操作时就加上某种锁,使得在同一时间其他用户不能对该文

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

求大师点化,寻求大文件(最大20G左右)上传方案

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足.小小开心了一把. 但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件.以现在我们的网速,恐怕再快也得传半小时.要命的是,如果你在上传到90%的时候不小心关掉了浏览器,或者是手一抖摁了F5,完了,一切还得从头再来.这种用户体验简直太糟糕了.所以,断点续传就十分有

上传文件按钮美化,上传文件前后状态控制

我们在做input文本上传的时候,html自带的上传按钮比较丑,如何对其进行美化呢?同理:input checkbox美化,input radio美化是一个道理的. input file上传按钮的美化思路是,先把之前的按钮透明度opacity设置为0,然后,外层用div包裹,就实现了美化功能. 注:input 的 type 为 file 时,它的 name 必须有值,因为这个 name 会做为上传文件信息的数组名称. <a href="javascript:;" class=&q