在 iOS 13.2 从照片库中选择视频时,文件大小仅适用于 Ionic 中的视频

File size is 0 only for videos in Ionic on iOS 13.2 when selecting videos from Photo Library

在我的 Ionic3 应用程序中,我按如下方式计算文件大小。

HTML

<div>
  <input type="file" accept="*" (change)="onSelect($event)">
  <button ion-button (click)="calcSize()">calculate size</button>
</div>
<p>Size: {{ size }}</p>

TS

  file: File;
  size: number;

  onSelect(event: any) {

    this.file = event.target.files[0];
  }
  calcSize() {

    this.size = this.file.size;
  }

以上代码在所有 Android 设备和低于 iOS 13.2.

的 iOS 设备上运行完美

但是在 iOS 大于 13.2 的设备上从照片库中选择视频时,size 仅对视频文件 为 0。

但是从 iCloud Drive 中选择视频时工作正常。

非常感谢任何帮助。

StackBlitz 上查找问题。

我认为这不是离子错误。规格说明如下:

On getting, conforming user agents must return the total number of bytes

https://w3c.github.io/FileAPI/

似乎是一个 ios 错误。

我花了 7 天多的时间才找到解决方案。我将我的发现作为答案发布,因为它会帮助面临此问题的人。

实际上我的目的是将包含其他数据的文件上传到 Rest API。这些功能仅在 iOS 版本为 13.2 的设备上失败。我找不到解决方案,因此决定更改整个实施。然后我使用 Camera plugin and File 插件从照片库中获取 select 视频。该实现也仅在版本为 13.2.

iOS 设备上存在相同问题

当使用readAsDataURL(path, file),readAsArrayBuffer(path, file)readAsBinaryString(path, file) File plugin on selected video file using Camera 插件中的方法它给出了 FileError 1(未找到错误)。

这个问题在 Camera plugin. The reason for this error is photo library asset urls being invalidated on iOS 13. There is a Git Hub Issue 中。

我在 This Link.

上找到了针对此问题的临时修复程序

我在platforms/ios中手动编辑了src/ios/CDVCamera.hsrc/ios/CDVCamera.m 如下。

CDVCamera.h

@property (strong) CDVCameraPicker* pickerController;
@property (strong) NSMutableDictionary *metadata;
@property (strong) NSDictionary *latestMediaInfo;// Newly added line
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong) NSData* data;

CDVCamera.m

__weak CDVCameraPicker* cameraPicker = (CDVCameraPicker*)picker;
__weak CDVCamera* weakSelf = self;

self.latestMediaInfo = info;// Newly added line

dispatch_block_t invoke = ^(void) {
    __block CDVPluginResult* result = nil;

希望这对面临此问题的人有所帮助。