Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
self-support
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李俊赕
self-support
Commits
fab84be6
Commit
fab84be6
authored
Apr 13, 2021
by
李俊赕
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
文件上传0.0.1
parent
e52b3f3a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
267 additions
and
0 deletions
+267
-0
util.js
src/components/upload/util.js
+267
-0
No files found.
src/components/upload/util.js
View file @
fab84be6
import
qiniuUploader
from
'@/include/libs/qiniuUploader.js'
;
//七牛云上传文件命名
export
const
randomChar
=
function
(
l
,
url
=
""
)
{
const
x
=
"0123456789qwertyuioplkjhgfdsazxcvbnm"
;
let
tmp
=
""
;
let
time
=
new
Date
();
for
(
let
i
=
0
;
i
<
l
;
i
++
)
{
tmp
+=
x
.
charAt
(
Math
.
ceil
(
Math
.
random
()
*
100000000
)
%
x
.
length
);
}
return
(
"file/"
+
url
+
time
.
getTime
()
+
tmp
);
}
//图片选择
//图片选择
export
const
chooseImage
=
function
(
data
)
{
export
const
chooseImage
=
function
(
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
...
@@ -18,4 +34,255 @@ export const chooseImage = function(data) {
...
@@ -18,4 +34,255 @@ export const chooseImage = function(data) {
});
});
});
});
}
}
//视频选择
export
const
chooseVideo
=
function
(
data
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
uni
.
chooseVideo
({
sourceType
:
data
.
sourceType
||
[
'album'
,
'camera'
],
//从相册选择
compressed
:
data
.
compressed
||
false
,
//是否压缩所选的视频源文件,默认值为 true,需要压缩。
maxDuration
:
data
.
maxDuration
||
60
,
//拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。
camera
:
data
.
camera
||
'back'
,
//'front'、'back',默认'back'
success
:
function
(
res
)
{
let
files
=
[{
path
:
res
.
tempFilePath
}];
// #ifdef APP-PLUS || H5 || MP-WEIXIN
files
[
0
].
duration
=
res
.
duration
;
files
[
0
].
size
=
res
.
size
;
files
[
0
].
height
=
res
.
height
;
files
[
0
].
width
=
res
.
width
;
// #endif
// #ifdef H5
files
[
0
].
name
=
res
.
name
;
// #endif
resolve
(
files
);
},
fail
:
err
=>
{
reject
({
errMsg
:
err
.
errMsg
,
errCode
:
err
.
errCode
,
statusCode
:
0
,
});
}
});
});
}
// 七牛云上传
export
const
qiniuUpload
=
function
(
requestInfo
,
getQnToken
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
Array
.
isArray
(
requestInfo
.
files
))
{
let
len
=
requestInfo
.
files
.
length
;
let
fileList
=
new
Array
;
if
(
getQnToken
)
{
getQnToken
(
qnRes
=>
{
/*
*接口返回参数:
*visitPrefix:访问文件的域名
*token:七牛云上传token
*folderPath:上传的文件夹
*region: 地区 默认为:SCN
*/
let
prefixLen
=
qnRes
.
visitPrefix
.
length
;
if
(
qnRes
.
visitPrefix
.
charAt
(
prefixLen
-
1
)
==
'/'
){
qnRes
.
visitPrefix
=
qnRes
.
visitPrefix
.
substring
(
0
,
prefixLen
-
1
)
}
uploadFile
(
0
);
function
uploadFile
(
i
)
{
let
item
=
requestInfo
.
files
[
i
];
let
updateUrl
=
randomChar
(
10
,
qnRes
.
folderPath
);
let
fileData
=
{
fileIndex
:
i
,
files
:
requestInfo
.
files
,
...
item
};
if
(
item
.
name
)
{
fileData
.
name
=
item
.
name
;
let
nameArr
=
item
.
name
.
split
(
"."
);
updateUrl
+=
"."
+
nameArr
[
nameArr
.
length
-
1
];
}
// 交给七牛上传
qiniuUploader
.
upload
(
item
.
path
||
item
,
(
res
)
=>
{
fileData
.
url
=
res
.
imageURL
;
requestInfo
.
onEachUpdate
&&
requestInfo
.
onEachUpdate
({
url
:
res
.
imageURL
,
...
fileData
});
fileList
.
push
(
res
.
imageURL
);
if
(
len
-
1
>
i
)
{
uploadFile
(
i
+
1
);
}
else
{
resolve
(
fileList
);
}
},
(
error
)
=>
{
reject
(
error
);
},
{
region
:
qnRes
.
region
||
'SCN'
,
//地区
domain
:
qnRes
.
visitPrefix
,
// bucket 域名,下载资源时用到。
key
:
updateUrl
,
uptoken
:
qnRes
.
token
,
// 由其他程序生成七牛 uptoken
uptokenURL
:
'UpTokenURL.com/uptoken'
// 上传地址
},
(
res
)
=>
{
console
.
log
(
requestInfo
);
requestInfo
.
onProgressUpdate
&&
requestInfo
.
onProgressUpdate
(
Object
.
assign
({},
fileData
,
res
));
// console.log('上传进度', res.progress)
// console.log('已经上传的数据长度', res.totalBytesSent)
// console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend)
});
}
});
}
else
{
reject
({
errMsg
:
"请添加七牛云回调方法:getQnToken"
,
statusCode
:
0
});
}
}
else
{
reject
({
errMsg
:
"files 必须是数组类型"
,
statusCode
:
0
});
};
});
}
// 服务器URL上传
export
const
urlUpload
=
function
(
requestInfo
,
dataFactory
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
// 本地文件上传去掉默认Content-Type
if
(
requestInfo
.
header
[
'Content-Type'
])
{
delete
requestInfo
.
header
[
'Content-Type'
];
}
// 本地文件上传去掉默认Content-Type
if
(
requestInfo
.
header
[
'content-type'
])
{
delete
requestInfo
.
header
[
'content-type'
];
}
if
(
Array
.
isArray
(
requestInfo
.
files
))
{
// #ifdef APP-PLUS || H5
let
files
=
[];
let
fileData
=
{
files
:
requestInfo
.
files
,
name
:
requestInfo
.
name
||
"file"
};
requestInfo
.
files
.
forEach
(
item
=>
{
let
fileInfo
=
{
name
:
requestInfo
.
name
||
"file"
,
};
if
(
item
.
path
){
fileInfo
.
uri
=
item
.
path
;
}
else
{
fileInfo
.
file
=
item
;
}
files
.
push
(
fileInfo
);
});
let
config
=
{
url
:
requestInfo
.
url
,
files
:
files
,
header
:
requestInfo
.
header
,
//加入请求头
success
:
(
response
)
=>
{
//是否用外部的数据处理方法
if
(
requestInfo
.
isFactory
&&
dataFactory
)
{
//数据处理
dataFactory
({
...
requestInfo
,
response
:
response
,
}).
then
(
data
=>
{
requestInfo
.
onEachUpdate
&&
requestInfo
.
onEachUpdate
({
data
:
data
,
...
fileData
});
resolve
(
data
);
},
err
=>
{
reject
(
err
);
});
}
else
{
requestInfo
.
onEachUpdate
&&
requestInfo
.
onEachUpdate
({
data
:
response
,
...
fileData
});
resolve
(
response
);
}
},
fail
:
(
err
)
=>
{
reject
(
err
);
}
};
if
(
requestInfo
.
data
)
{
config
.
formData
=
requestInfo
.
data
;
}
const
uploadTask
=
uni
.
uploadFile
(
config
);
uploadTask
.
onProgressUpdate
(
res
=>
{
requestInfo
.
onProgressUpdate
&&
requestInfo
.
onProgressUpdate
(
Object
.
assign
({},
fileData
,
res
));
});
// #endif
// #ifdef MP
const
len
=
requestInfo
.
files
.
length
-
1
;
let
fileList
=
new
Array
;
fileUpload
(
0
);
function
fileUpload
(
i
)
{
let
item
=
requestInfo
.
files
[
i
];
let
fileData
=
{
fileIndex
:
i
,
files
:
requestInfo
.
files
,
...
item
};
let
config
=
{
url
:
requestInfo
.
url
,
filePath
:
item
.
path
,
header
:
requestInfo
.
header
,
//加入请求头
name
:
requestInfo
.
name
||
"file"
,
success
:
(
response
)
=>
{
//是否用外部的数据处理方法
if
(
requestInfo
.
isFactory
&&
dataFactory
)
{
//数据处理
dataFactory
({
...
requestInfo
,
response
:
response
,
}).
then
(
data
=>
{
fileList
.
push
(
data
);
requestInfo
.
onEachUpdate
&&
requestInfo
.
onEachUpdate
({
data
:
data
,
...
fileData
});
if
(
len
<=
i
)
{
resolve
(
fileList
);
}
else
{
fileUpload
(
i
+
1
);
}
},
err
=>
{
reject
(
err
);
});
}
else
{
requestInfo
.
onEachUpdate
&&
requestInfo
.
onEachUpdate
({
data
:
response
,
...
fileData
});
fileList
.
push
(
response
);
if
(
len
<=
i
)
{
resolve
(
fileList
);
}
else
{
fileUpload
(
i
+
1
);
}
}
},
fail
:
(
err
)
=>
{
reject
(
err
);
}
};
if
(
requestInfo
.
data
)
{
config
.
formData
=
requestInfo
.
data
;
}
const
uploadTask
=
uni
.
uploadFile
(
config
);
uploadTask
.
onProgressUpdate
(
res
=>
{
requestInfo
.
onProgressUpdate
&&
requestInfo
.
onProgressUpdate
(
Object
.
assign
({},
fileData
,
res
));
});
}
// #endif
}
else
{
reject
({
errMsg
:
"files 必须是数组类型"
,
statusCode
:
0
});
}
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment