You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.4 KiB
208 lines
5.4 KiB
import request from "./../core/request.js"; |
|
const { |
|
chooseImage, |
|
chooseVideo, |
|
qiniuUpload, |
|
urlUpload |
|
} = require("./utils"); |
|
import { |
|
mergeConfig |
|
} from "./../core/utils.js"; |
|
export default class fileUpload extends request { |
|
constructor(props) { |
|
// 调用实现父类的构造函数 |
|
super(props); |
|
} |
|
//七牛云上传图片 |
|
async qnImgUpload(options = {}) { |
|
let files; |
|
try { |
|
files = await chooseImage(options); |
|
// 选择完成回调 |
|
options.onSelectComplete && options.onSelectComplete(files); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} |
|
if (files) { |
|
return this.qnFileUpload({ |
|
...options, |
|
files: files |
|
}); |
|
} |
|
} |
|
//七牛云上传视频 |
|
async qnVideoUpload(options = {}) { |
|
let files; |
|
try { |
|
files = await chooseVideo(options); |
|
// 选择完成回调 |
|
options.onSelectComplete && options.onSelectComplete(files); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} |
|
if (files) { |
|
return this.qnFileUpload({ |
|
...options, |
|
files: files |
|
}); |
|
} |
|
} |
|
|
|
//七牛云文件上传(支持多张上传) |
|
async qnFileUpload(options = {}) { |
|
let requestInfo; |
|
try { |
|
// 数据合并 |
|
requestInfo = { |
|
...this.config, |
|
...options, |
|
header: {}, |
|
method: "FILE" |
|
}; |
|
//请求前回调 |
|
if (this.requestStart) { |
|
let requestStart = this.requestStart(requestInfo); |
|
if (typeof requestStart == "object") { |
|
let changekeys = ["load", "files"]; |
|
changekeys.forEach(key => { |
|
requestInfo[key] = requestStart[key]; |
|
}); |
|
} else { |
|
throw { |
|
errMsg: "【request】请求开始拦截器未通过", |
|
statusCode: 0, |
|
data: requestInfo.data, |
|
method: requestInfo.method, |
|
header: requestInfo.header, |
|
url: requestInfo.url, |
|
} |
|
} |
|
} |
|
let requestResult = await qiniuUpload(requestInfo, this.getQnToken); |
|
return Promise.resolve(requestResult); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} finally { |
|
this.requestEnd && this.requestEnd(requestInfo); |
|
} |
|
} |
|
//本地服务器图片上传 |
|
async urlImgUpload() { |
|
let options = {}; |
|
if (arguments[0]) { |
|
if (typeof(arguments[0]) == "string") { |
|
options.url = arguments[0]; |
|
} else if (typeof(arguments[0]) == "object") { |
|
options = Object.assign(options, arguments[0]); |
|
} |
|
} |
|
if (arguments[1] && typeof(arguments[1]) == "object") { |
|
options = Object.assign(options, arguments[1]); |
|
} |
|
try { |
|
options.files = await chooseImage(options); |
|
// 选择完成回调 |
|
options.onSelectComplete && options.onSelectComplete(options.files); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} |
|
if (options.files) { |
|
return this.urlFileUpload(options); |
|
} |
|
} |
|
//本地服务器上传视频 |
|
async urlVideoUpload() { |
|
let options = {}; |
|
if (arguments[0]) { |
|
if (typeof(arguments[0]) == "string") { |
|
options.url = arguments[0]; |
|
} else if (typeof(arguments[0]) == "object") { |
|
options = Object.assign(options, arguments[0]); |
|
} |
|
} |
|
if (arguments[1] && typeof(arguments[1]) == "object") { |
|
options = Object.assign(options, arguments[1]); |
|
} |
|
try { |
|
options.files = await chooseVideo(options); |
|
// 选择完成回调 |
|
options.onSelectComplete && options.onSelectComplete(options.files); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} |
|
if (options.files) { |
|
return this.urlFileUpload(options); |
|
} |
|
} |
|
//本地服务器文件上传方法 |
|
async urlFileUpload() { |
|
let requestInfo = { |
|
method: "FILE" |
|
}; |
|
if (arguments[0]) { |
|
if (typeof(arguments[0]) == "string") { |
|
requestInfo.url = arguments[0]; |
|
} else if (typeof(arguments[0]) == "object") { |
|
requestInfo = Object.assign(requestInfo, arguments[0]); |
|
} |
|
} |
|
if (arguments[1] && typeof(arguments[1]) == "object") { |
|
requestInfo = Object.assign(requestInfo, arguments[1]); |
|
} |
|
if (!requestInfo.url && this.defaultUploadUrl) { |
|
requestInfo.url = this.defaultUploadUrl; |
|
} |
|
// 请求数据 |
|
// 是否运行过请求开始钩子 |
|
let runRequestStart = false; |
|
try { |
|
if (!requestInfo.url) { |
|
throw { |
|
errMsg: "【request】文件上传缺失数据url", |
|
statusCode: 0, |
|
data: requestInfo.data, |
|
method: requestInfo.method, |
|
header: requestInfo.header, |
|
url: requestInfo.url, |
|
} |
|
} |
|
// 数据合并 |
|
requestInfo = mergeConfig(this, requestInfo); |
|
// 代表之前运行到这里 |
|
runRequestStart = true; |
|
//请求前回调 |
|
if (this.requestStart) { |
|
let requestStart = this.requestStart(requestInfo); |
|
if (typeof requestStart == "object") { |
|
let changekeys = ["data", "header", "isPrompt", "load", "isFactory", "files"]; |
|
changekeys.forEach(key => { |
|
requestInfo[key] = requestStart[key]; |
|
}); |
|
} else { |
|
throw { |
|
errMsg: "【request】请求开始拦截器未通过", |
|
statusCode: 0, |
|
data: requestInfo.data, |
|
method: requestInfo.method, |
|
header: requestInfo.header, |
|
url: requestInfo.url, |
|
} |
|
} |
|
} |
|
let requestResult = await urlUpload(requestInfo, this.dataFactory); |
|
return Promise.resolve(requestResult); |
|
} catch (err) { |
|
this.requestError && this.requestError(err); |
|
return Promise.reject(err); |
|
} finally { |
|
if (runRequestStart) { |
|
this.requestEnd && this.requestEnd(requestInfo); |
|
} |
|
} |
|
} |
|
}
|
|
|