码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-06-09 09:25:26      阅读:1712      评论:0      收藏:0      [点我收藏+]

标签:xmlhttp   write   tle   api   sele   技术   sts   evel   post   

什么是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

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

标签:xmlhttp   write   tle   api   sele   技术   sts   evel   post   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!