<div class="upload-wraper">
<input type="file" id="upload_ele" multiple="false" accept="image/*" @change="uploadFile()" />
</div>
type=file将类型设置为选择文件
multiple是否允许文件的多选
accept="image/*" 将文件的类型限制为image类型,*包括所有格式的图片
change事件当type设置为file后,出发的事件为change,也可通过submit实现
这里布局的话,因为是vue组件所以简单点,不需要多个input构成form表单,然后通过submit提交,一个input通过change事件来实现上传
Js
Basic information for uploading files
let oFIle = document.getElementById('upload-ele').files[0];
files是input设置为file后的一个js内置对象。files对象死一个read-only属性,不可被修改!
打印出oFile后可以看到该文件对象的basic information.如下:
isClosed:false 是否已经结束,可以理解为标签是否闭合
lastModified:1539602132000最后更改的时间timeStamp
lastModifiedDate:Mon Oct 15 2018 19:15:32 GMT+0800 (CST) {}最后更改时间
name:"D9791645A5DF19D17FD7392A080E7A28.jpg"图片的名称
path:"/Users/mac/Documents/D9791645A5DF19D17FD7392A080E7A28.jpg"图片所在的路径为本地路径
Size:38938图片的大小信息 单位为kb
type:'image/jpeg'图片的类型
webkitRelativePath:""文件相关的路径
File Size Processing
大小判断
(oFile.size / 1024) > 1024
1M = 1024KB
Smaller
let form = new FormData();
form.append('file',oFile);
let xhr = new XMLHttpRequest();
xhr.open('post',url,true);
xhr.timeout = 30 * 1000;
xhr.upload.onprogress = this.progress;
xhr.onload = this.uploadComplete;
xhr.onerror = this.uploadFailed;
xhr.upload.onloadstart = () => {
let date = new Date().getTime();
let initSize = 0;
}
xhr.send(form);
XMLHttpRequest()是js内置对象,可以使用该属性实现请求头的处理操作。
xhr.open(); 请求方法: post,url: 服务器接受的地址,true/false 是否异步
xhr.timeout; 设置超时时间,据情况而定
xhr.ontimeout; 超时处理,一般为取消请求
xhr.upload.onprogress; 进程处理 ,上传文件的进度处理
xhr.onload; 请求成功处理
xhr.onerror; 请求失败处理
Xhr.upload.onloadstart; 请求开始处理的操作,一般创建时间戳,初始化大小。
xhr.send(); 请求配置完毕,发送请求
这里小于1M的文件是可以直接通过放到formData中,通过配置xhr将图片对象上传到oss,在请求成功时拿到图片的网络路径