简单上传
本文介绍如何进行简单上传。
从内存中上传或上传本地文件
上传文件时可以直接上传 OSSData,或者通过 NSURL 上传一个文件:
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// 必填字段
put.bucketName = @"<bucketName>";
put.objectKey = @"<objectKey>";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// put.uploadingData = <NSData *>; // 直接上传NSData
// 可选字段,可不设置
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 当前上传段长度、当前已经上传总长度、一共需要上传的总长度
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject
// put.contentType = @"";
// put.contentMd5 = @"";
// put.contentEncoding = @"";
// put.contentDisposition = @"";
// put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil]; // 可以在上传时设置元信息或者其他HTTP头部
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// [putTask waitUntilFinished];
// [put cancel];
上传到文件目录
OSS 没有文件夹的概念,所有元素都是以文件来存储。OSS 给用户提供了创建模拟文件夹的方式。创建模拟文件夹本质上是创建了一个名字以“/”结尾的文件以实现上传下载,只是控制台会对以“/”结尾的文件以文件夹的方式展示。
上传文件时,如果把 ObjectKey 写为"folder/subfolder/file"
,即是模拟了把文件上传到folder/subfolder/
下的file
文件。注意,路径默认是根目录,不需要以正斜线 / 开头。
上传时设置 Content-Type 和开启校验 MD5
上传时可以显式指定 ContentType,如果没有指定,SDK 会根据文件名或者上传的ObjectKey 自动判断。另外,上传 Object 时如果设置了 Content-MD5,那么 OSS 会用 Content-MD5 检查消息内容是否与发送时一致。SDK 提供了方便的 Base64 和 MD5 计算方法。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// 必填字段
put.bucketName = @"<bucketName>";
put.objectKey = @"<objectKey>";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// put.uploadingData = <NSData *>; // 直接上传NSData
// 设置Content-Type,可选
put.contentType = @"application/octet-stream";
// 设置MD5校验,可选
put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"]; // 如果是文件路径
// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>]; // 如果是二进制数据
// 进度设置,可选
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 当前上传段长度、当前已经上传总长度、一共需要上传的总长度
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// [putTask waitUntilFinished];
// [put cancel];
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论