Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
9e2de20d
U
uni-app
项目概览
DCloud
/
uni-app
3 个月 前同步成功
通知
725
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9e2de20d
编写于
4月 03, 2020
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: H5端选择文件接口支持返回原始File对象 close #1510 #1004
上级
e449a680
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
34 addition
and
23 deletion
+34
-23
src/platforms/h5/helpers/file.js
src/platforms/h5/helpers/file.js
+5
-0
src/platforms/h5/service/api/media/choose-image.js
src/platforms/h5/service/api/media/choose-image.js
+13
-12
src/platforms/h5/service/api/media/choose-video.js
src/platforms/h5/service/api/media/choose-video.js
+16
-11
未找到文件。
src/platforms/h5/helpers/file.js
浏览文件 @
9e2de20d
...
@@ -61,3 +61,8 @@ export function fileToUrl (file) {
...
@@ -61,3 +61,8 @@ export function fileToUrl (file) {
files
[
url
]
=
file
files
[
url
]
=
file
return
url
return
url
}
}
export
function
revokeObjectURL
(
url
)
{
(
window
.
URL
||
window
.
webkitURL
).
revokeObjectURL
(
url
)
delete
files
[
url
]
}
src/platforms/h5/service/api/media/choose-image.js
浏览文件 @
9e2de20d
...
@@ -50,26 +50,27 @@ export function chooseImage ({
...
@@ -50,26 +50,27 @@ export function chooseImage ({
document
.
body
.
appendChild
(
imageInput
)
document
.
body
.
appendChild
(
imageInput
)
imageInput
.
addEventListener
(
'
change
'
,
function
(
event
)
{
imageInput
.
addEventListener
(
'
change
'
,
function
(
event
)
{
const
tempFilePaths
=
[]
const
tempFiles
=
[]
const
tempFiles
=
[]
const
fileCount
=
event
.
target
.
files
.
length
const
fileCount
=
event
.
target
.
files
.
length
for
(
let
i
=
0
;
i
<
fileCount
;
i
++
)
{
for
(
let
i
=
0
;
i
<
fileCount
;
i
++
)
{
const
file
=
event
.
target
.
files
[
i
]
const
file
=
event
.
target
.
files
[
i
]
const
filePath
=
fileToUrl
(
file
)
let
filePath
Object
.
defineProperty
(
file
,
'
filePath
'
,
{
tempFilePaths
.
push
(
filePath
)
get
()
{
tempFiles
.
push
({
filePath
=
filePath
||
fileToUrl
(
file
)
path
:
filePath
,
return
filePath
size
:
file
.
size
,
}
name
:
file
.
name
})
})
tempFiles
.
push
(
file
)
}
}
const
res
=
{
invoke
(
callbackId
,
{
errMsg
:
'
chooseImage:ok
'
,
errMsg
:
'
chooseImage:ok
'
,
tempFilePaths
:
tempFilePaths
,
get
tempFilePaths
()
{
return
tempFiles
.
map
(({
filePath
})
=>
filePath
)
},
tempFiles
:
tempFiles
tempFiles
:
tempFiles
})
}
invoke
(
callbackId
,
res
)
// TODO 用户取消选择时,触发 fail,目前尚未找到合适的方法。
// TODO 用户取消选择时,触发 fail,目前尚未找到合适的方法。
})
})
...
...
src/platforms/h5/service/api/media/choose-video.js
浏览文件 @
9e2de20d
import
{
fileToUrl
}
from
'
uni-platform/helpers/file
'
import
{
fileToUrl
,
revokeObjectURL
}
from
'
uni-platform/helpers/file
'
import
{
updateElementStyle
}
from
'
uni-shared
'
import
{
updateElementStyle
}
from
'
uni-shared
'
const
{
const
{
...
@@ -42,23 +42,30 @@ export function chooseVideo ({
...
@@ -42,23 +42,30 @@ export function chooseVideo ({
videoInput
.
addEventListener
(
'
change
'
,
function
(
event
)
{
videoInput
.
addEventListener
(
'
change
'
,
function
(
event
)
{
const
file
=
event
.
target
.
files
[
0
]
const
file
=
event
.
target
.
files
[
0
]
const
filePath
=
fileToUrl
(
file
)
const
callbackResult
=
{
let
callbackResult
=
{
errMsg
:
'
chooseVideo:ok
'
,
errMsg
:
'
chooseVideo:ok
'
,
tempFile
Path
:
filePath
,
tempFile
:
file
,
size
:
file
.
size
,
size
:
file
.
size
,
duration
:
0
,
duration
:
0
,
width
:
0
,
width
:
0
,
height
:
0
,
height
:
0
,
name
:
file
.
name
name
:
file
.
name
}
}
let
filePath
Object
.
defineProperty
(
callbackResult
,
'
tempFilePath
'
,
{
get
()
{
filePath
=
filePath
||
fileToUrl
(
this
.
tempFile
)
return
filePath
}
})
const
video
=
document
.
createElement
(
'
video
'
)
const
video
=
document
.
createElement
(
'
video
'
)
if
(
video
.
onloadedmetadata
!==
undefined
)
{
if
(
video
.
onloadedmetadata
!==
undefined
)
{
const
filePath
=
fileToUrl
(
file
)
// 尝试获取视频的宽高信息
// 尝试获取视频的宽高信息
video
.
onloadedmetadata
=
function
()
{
video
.
onloadedmetadata
=
function
()
{
invoke
(
callbackId
,
Object
.
assign
({},
callbackResult
,
{
revokeObjectURL
(
filePath
)
invoke
(
callbackId
,
Object
.
assign
(
callbackResult
,
{
duration
:
video
.
duration
||
0
,
duration
:
video
.
duration
||
0
,
width
:
video
.
videoWidth
||
0
,
width
:
video
.
videoWidth
||
0
,
height
:
video
.
videoHeight
||
0
height
:
video
.
videoHeight
||
0
...
@@ -66,11 +73,9 @@ export function chooseVideo ({
...
@@ -66,11 +73,9 @@ export function chooseVideo ({
}
}
// 部分浏览器(如微信内置浏览器)未播放无法触发loadedmetadata事件
// 部分浏览器(如微信内置浏览器)未播放无法触发loadedmetadata事件
setTimeout
(()
=>
{
setTimeout
(()
=>
{
invoke
(
callbackId
,
Object
.
assign
({},
callbackResult
,
{
video
.
onloadedmetadata
=
null
duration
:
0
,
revokeObjectURL
(
filePath
)
width
:
0
,
invoke
(
callbackId
,
callbackResult
)
height
:
0
}))
},
300
)
},
300
)
video
.
src
=
filePath
video
.
src
=
filePath
}
else
{
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录