小鸡炸

导航

js文件的上传和下载

### 一、文件上传

#####   1、浏览器上传要求:

######          a、表单 method 属性应该设置为 post

######          b、enctype="multipart/form-data"、表单必须设置该属性 二进制

#####   2、服务器端存储上传图片要求

######          a、必须在Servlet类添加@MultipartConfig注解、代表支持上传文件的Servlet

######          b、每一个浏览器的上传文件就是一个Part对象、通过request.getPart("file")得到

######          c、使用part.write()方法存储上传的文件

######          d、多文件使用Collection<Part> parts = request.getParts()获取

#####   3、Part常用方法

|         方法名         |                 作用                 |
| :--------------------: | :----------------------------------: |
|        write()         | 文件写入(参数为:完整路径和文件名) |
|    getContentType()    |          获取上传文件的类型          |
| getSubmittedFileName() |          获取上传文件的名称          |
|       getSize()        |     获取上传文件的大小、单位字节     |

#####   4、Ajax异步文件上传

######      a、jquery的文件上传

```javascript
$.ajax({
    url: "../TestServlet01",
    data: new FormData($("#form1")[0]),
    type: "post",
    //cache: false,//上传文件无需缓存
    processData: false,//用于对data参数进行序列化处理 这里必须false
    contentType: false, //必须
    success: function (result) {
        alert("上传完成!");
    }
})
```

######      b、axios的文件上传

```javascript
//获取整个文件上传组件(这个组件可能包含多个文件)
let img1 = document.getElementById('file1')
//封装要上传的对象
let formData = new FormData()
//传递的第一个图片对象、参数(key、value、文件名)、多文件上传继续拼接即可
formData.append("file1", img1.files[0], img1.files[0].name)
formData.append("name", "张三")

axios.post("http://localhost:8080/javaeedemo002/Servlet001", formData, {
    //设置上传的头文件
    headers: {"Content-Type": "multipart/form-data;boundary=" + new Date().getTime()}
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});
```

### 二、文件下载、固定代码

```java
response.setContentType("application/x-download");
//设置下载数据的格式
response.addHeader("Content-Disposition","attachment;filename=a.jpg");
//获取需要下载的文件如今
File file=new File(request.getServletContext().getRealPath("/img/1.jpg"));
//创建文件流
FileInputStream fis=new FileInputStream(file);
//每次读写1024KB
byte[] b=new byte[1024];
int i=-1;
while ((i=fis.read(b))>0) {
    //开始给客户端传输数据
    response.getOutputStream().write(b,0,i);
}
```

posted on 2022-01-19 11:10  小鸡炸  阅读(678)  评论(0编辑  收藏  举报