配置信息:
- SDK
AWSS3: 2.33.4 - Language:
OC
全部代碼如下:
本機(jī)搭建的minio服務(wù)
AWSDDLog.sharedInstance.logLevel = AWSDDLogLevelVerbose;
[AWSDDLog addLogger:AWSDDTTYLogger.sharedInstance];
AWSStaticCredentialsProvider *provider = [[AWSStaticCredentialsProvider alloc]
initWithAccessKey:@"WLZO9XjvNdBjsbKppE36" secretKey:@"FpFIhYUoxpGGTUiSrHMUl78ugSuMQ5k2ZscFht4W"];
AWSEndpoint *minioEndpoint = [[AWSEndpoint alloc] initWithRegion:AWSRegionUSWest2 service:AWSServiceS3 URL:
[NSURL URLWithString:@"http://192.168.65.202:9000"]];
AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSWest2
endpoint:minioEndpoint credentialsProvider:provider localTestingEnabled:true];
configuration.maxRetryCount = 1;
configuration.timeoutIntervalForRequest = 10;
configuration.timeoutIntervalForResource = 10;
AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
[AWSS3 registerS3WithConfiguration:configuration forKey:@"USWest2S3"];
NSMutableString *dataString = [NSMutableString new];
for (int32_t i = 1; i < 10000000; i++) {
[dataString appendFormat:@"%d\n", i];
}
NSData *testData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
AWSS3 *S3 = [AWSS3 S3ForKey:@"USWest2S3"];
NSString *fileName= @"ios_test.txt";
AWSS3PutObjectRequest *request = [[AWSS3PutObjectRequest alloc] init];
request.bucket = @"ios.bucket.test";
request.key = fileName;
request.contentType = @"text/plain";
request.ACL = AWSS3ObjectCannedACLPublicRead;
request.body = testData;
request.contentLength = @(testData.length);
[S3 putObject:request completionHandler:^(AWSS3PutObjectOutput * _Nullable response, NSError * _Nullable error) {
if (!error) {
NSLog(@"succeed");
}else{
NSLog(@"failed: %@", error.localizedDescription);
}
}];
問題原因:
主要是bucket name的格式問題會導(dǎo)致上傳失敗,比如ios-test-bucket,這種-符號鏈接起來就不能上傳到minio,這個bucket name會作為主機(jī)名拼在域名的前面,所以導(dǎo)致域名訪問不了;
解決辦法:如果能改bucket name的格式就改(判斷規(guī)則在函數(shù)aws_isVirtualHostedStyleCompliant里面);
不能改就只能去改代碼了;主要是改函數(shù)updateRequestToUseVirtualHostURL 里面的aws_isVirtualHostedStyleCompliant的判斷;我們公司后端了為了跟阿里云統(tǒng)一所以就只能改代碼了;