如何使用expoFileSystem获取文件扩展名



我正在使用expo FileSystem从cameraRoll获取照片和视频。有办法得到这些文件的扩展名吗?

使用ImagePicker

如果你已经请求了许可,并且能够从ImagePicker获得响应,那么你应该得到一个看起来像这样的对象。

{
"cancelled": false,
"height": 2436,
"type": "image",
"uri": "file:///lots/of/directories/where/the/image/is/stored/ImagePicker/B69EA641-4738-4425-8319-FE190FC4BD6D.png",
"width": 1125,
}

如果你这样调用ImagePicker(记住这是一个await,所以它应该被包装在try/catch中)

let result = await ImagePicker.launchImageLibraryAsync({mediaTypes:'Images'});

然后,您可以使用result.uri访问uri

所以我们可以做一些类似的事情

let uri = result.uri;
let fileExtension = uri.substr(uri.lastIndexOf('.') + 1);

请记住,用户可以取消请求,因此在尝试获取文件扩展名之前,应检查result.cancelled是否为false,否则将出现问题,因为uri将不存在。

使用CameraRoll

使用相机胶卷的反应在不同平台上并不一致。以下代码将访问设备上的第一个视频。

let params = { first: 1, assetType: CameraRoll.AssetTypeOptions.Videos }; 
let result = await CameraRoll.getPhotos(params)
let videos = result.edges // the edges key stores an array of objects

Android

{
node: {
group_name: 0,
image:  {
height: 1280,
playableDuration: 56,
uri: "content://media/external/video/media/125",
width: 720,
},
timestamp: 1541516873,
type: "video/mp4",
},
}

iOS

{
node:  {
group_name: "Camera Roll",
image:  {
filename: "IMG_5030.MOV",
height: 1080,
isStored: true,
playableDuration: 612,
uri: "assets-library://asset/asset.MOV?id=10711D3D-EBDC-4EF2-A849-411D593A0B15&ext=MOV",
width: 1920,
},
location:  {
altitude: 0,
heading: -1,
latitude: 0.0,
longitude: 0.0,
speed: -1,
},
timestamp: 1544786625,
type: "ALAssetTypeVideo",
},
}

正如您所看到的,Android没有给出特定的filename,而iOS有。对于iOS,您可以使用上面描述的方法提取文件扩展名。不幸的是,对于Android,获得实际文件扩展名的唯一方法是使用ImagePicker

相关内容

  • 没有找到相关文章

最新更新