您的位置首页  散文杂谈

deletefile(deletefile 错误码5怎样解决)满满干货


↓推荐关注↓背景背景:最近一次业务需求是通过本地录制或者相册视频上传到亚马逊服务研究:前端小伙伴尝试接入 SDK 发现 AWS3 的上传部分还是需要做很多工作,比如切片部

deletefile(deletefile 错误码5怎样解决)满满干货

 

↓推荐关注↓背景背景:最近一次业务需求是通过本地录制或者相册视频上传到亚马逊服务研究:前端小伙伴尝试接入 SDK 发现 AWS3 的上传部分还是需要做很多工作,比如切片部分 > 5M 及 ETAG 处理等

决策:为了减少前端工作,决定采用后端调用 S3 SDK 方式,前端通过后端预签名后的 URL 直接进行文件分段上传Github:TWMultiUploadFileManager[1]安装使用Cocoapods安装,或手动拖入项目

pod TWMultiUploadFileManager方案后端执行执行 AWS3 SDK API,前端通过后端预签名后的 URL 直接进行文件分段上传步骤step1: 前端对文件选取后进行切片 (> 5M )

step2: 请求后端上传 aws3 资源 urlstep3: 切片后的文件足个上传 aws3 服务器step4: 请求后端对上传完毕的资源文件做校验流程图

TWMultiUploadFileManager 组件封装功能封装了对文件分片处理,以及上传功能具体功能 ☑️maxConcurrentOperationCount:上传线程并发个数(默认3 )maxSize:文件大小限制(默认2GB )

perSlicedSize:每个分片大小(默认5M)retryTimes:每个分片上传尝试次数(默认3)timeoutInterval:請求時長 (默認 120 s)headerFields:附加 header

mimeType:文件上传类型 不为空 (默认 text/plain)TODO ⏳上传文件最大时长(秒s)默认7200最大缓冲分片数(默认100,建议不低于10,不高于100)附加参数, 目前封装 put 请求,后续会补充 post 请求

并发队列管理依赖 Queuer[2] 库根据场景:自定义 TWConcurrentOperation步骤step 1从相册中选择视频源(文件)// MARK: - Action/// 选择影片fileprivate

funcselectPhotoAction(animated: Bool = true) {let imagePicker: TZImagePickerController! = TZImagePickerController

(maxImagesCount: 9, delegate: self)    imagePicker.allowPickingVideo = true    imagePicker.allowPreview = 

false    imagePicker.videoMaximumDuration = Macro.videoMaximumDuration    imagePicker.maxCropVideoDuration = 

Int(Macro.videoMaximumDuration)    imagePicker.allowPickingOriginalPhoto = false    imagePicker.allowPickingImage = 

false    imagePicker.allowPickingMultipleVideo = false    imagePicker.autoDismiss = false    imagePicker.navLeftBarButtonSettingBlock = { leftButton 

in        leftButton?.isHidden = true    }    present(imagePicker, animated: animated, completion: nil

)}/// 获取视频资源fileprivatefunchandleRequestVideoURL(asset: PHAsset)  {/// loadingprint("loading....")self

.requestVideoURL(asset: asset) { [weakself] (urlasset, url) inguardletself = selfelse { return }print

("success....")self.url = urlself.asset = assetself.uploadVideoView.play(videoUrl: url)    } failure: { (info) 

inprint("fail....")    }}对视频源文件进行切片并创建上传资源对象(文件)/// 上传影片fileprivatefuncuploadVideoAction() {guardlet url = url, 

let asset = asset ,let outputPath: String = self.fetchVideoPath(url: url) else { return }let relativePath: 

String = TWMultiFileManager.copyVideoFile(atPath: outputPath, dirPathName: Macro.dirPathName)// 创建上传资源对象, 对文件进行切片

let fileSource: TWMultiUploadFileSource = TWMultiUploadFileSource(        configure: self.configure,        filePath: relativePath,

        fileType: .video,        localIdentifier: asset.localIdentifier    )// 

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186