function upload_progress(event){
/*
上传进度处理函数,这里只是一个示范函数,实际中要重写此函数.
:params event: 文件上传事的事件,一般由XMLHttpRequest的upload的事件监听器来传递事件.
:return: nothing
*/
if (event.lengthComputable) {
var complete_percent = Math.round(event.loaded * 100 / event.total);
console.log(`完成度:${complete_percent}`);
}else{}
}
function upload_complete(event){
/*
上传文件success时的事件,根据实际需要可以覆盖.
:params event: 文件上传事的事件,一般由XMLHttpRequest的upload的事件监听器来传递事件.
:return: nothing
*/
let json = {"message": "未知的错误"};
let status = event.target.status;
if(status !== 200){
json = {"message": `服务器没有作出正确的回应,返回码:${status}`};
}
else{
let str = event.target.responseText;
if(str === undefined){
json['message'] = "上传成功,但服务器没有回应任何消息";
}
else{
json = JSON.parse(str);
}
}
console.log(json);
if(json['message'] === "success"){
alert("上传成功!");
// 以下为定制脚本
$("#return_url").attr("src", json['data']['url']);
}
else{
alert(json['message']);
}
}
function upload_error(event){
/*
上传文件失败时的事件,根据实际需要可以覆盖.
:params event: 文件上传事的事件,一般由XMLHttpRequest的upload的事件监听器来传递事件.
:return: nothing
*/
let json = {"message": "error"};
console.log(json);
}
function upload_abort(event){
/*
上传文件被中止时的事件,根据实际需要可以覆盖.
:params event: 文件上传事的事件,一般由XMLHttpRequest的upload的事件监听器来传递事件.
:return: nothing
*/
let json = {"message": "abort"};
console.log(json);
}
function upload(file_name, $obj, action_url, header_dict){
/*
上传文件.
:params file_name: 文件名.
:params $obj: input的jquery对象.
:params action_url: 上传的服务器url
:params header_dict: 放入header的参数,是键值对形式的字典,键名不要用下划线,因为那是个禁忌
:return: dict类型. 一个字典对象,一般是{"message": "success"}
*/
let data = new FormData();
data.append(file_name, $obj[0].files[0]);
/*
有关XMLHttpRequest对象的详细信息,请参考.
https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest
*/
let req = new XMLHttpRequest();
req.upload.addEventListener("progress", upload_progress, false);
req.addEventListener("load", upload_complete, false);
req.addEventListener("error", upload_error, false);
req.addEventListener("abort", upload_abort, false);
req.open("post", action_url);
// 必须在open之后才能给请求头赋值
if(header_dict){
/*
* 传送请求头信息,目前服务端还未做对应的处理.这只是与被给后来使用的.
* */
for(let k in header_dict){
req.setRequestHeader(k, header_dict[k]);
}
}
req.send(data);
}
不依赖form元素上传文件
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.使用微博开发的一个“发送带图片微博”的接口来测试,这是接口地址,这里面明确说明需要使用multipart/fo...