iOS上傳文件到minio的問題

配置信息:

  • 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)一所以就只能改代碼了;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容