RT.iOS中怎么使用OSS一次上传多个文件,另外为啥使用局部变量上传就报错在失效的会话中建立任务.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在iOS中使用OSS上传多个文件,可以通过循环或批量操作的方式逐一调用上传接口来实现。以下是使用简单上传方式上传多个文件的基本步骤和注意事项:
初始化OSSClient: 确保您已经按照官方文档正确配置并初始化了OSSClient
实例,这一步是所有OSS操作的前提。
遍历文件列表: 首先获取需要上传的所有文件路径列表,可以是一个数组或其他集合结构。
逐个上传文件:
OSSPutObjectRequest
实例。bucketName
、objectKey
(即上传到OSS的路径)以及uploadingFileURL
(从本地文件路径创建的URL)。contentType
和contentMd5
以确保数据一致性。OSSClient
的putObject:completionHandler:
方法上传文件,并为每个上传任务提供完成处理程序来捕获结果或错误。示例代码片段:
NSArray *filePaths = @[@"path/to/file1", @"path/to/file2"]; // 文件路径列表
NSString *bucketName = @"your-bucket-name"; // 您的Bucket名称
// 已经初始化好的OSSClient实例
OSSClient *client = /* 初始化OSSClient */;
for (NSString *filePath in filePaths) {
OSSPutObjectRequest *putRequest = [OSSPutObjectRequest new];
putRequest.bucketName = bucketName;
putRequest.objectKey = @"your-directory/" + [filePath lastPathComponent]; // 自定义对象键,可包含目录路径
putRequest.uploadingFileURL = [NSURL fileURLWithPath:filePath];
// 可选:设置contentType等
// putRequest.contentType = ...;
// putRequest.contentMd5 = ...;
[client putObject:putRequest completionHandler:^(OSSPutObjectResult * _Nullable result, NSError * _Nullable error) {
if (error) {
NSLog(@"Upload failed for %@ with error: %@", filePath, error.localizedDescription);
} else {
NSLog(@"Successfully uploaded %@.", filePath);
}
}];
}
关于“为啥使用局部变量上传就报错在失效的会话中建立任务”,这通常意味着您的上传任务可能在一个短暂生命周期的上下文中执行,比如任务在某个方法内被创建并尝试执行,但该方法结束前任务并未完成,导致任务相关的资源被提前释放。解决此问题的方法是确保OSS上传任务在其生命周期内能够完整执行,避免在局部作用域内直接启动长时间运行的任务。上述示例代码中,由于上传任务是在循环内部立即执行并等待其完成的,因此不会遇到此类问题。
请根据实际情况调整代码逻辑,确保任务执行环境的持续有效性。