Aby rozwiązać ten problem, zacząłem od przykładowego kodu Amazon w pakiecie SDK na iOS, który został znaleziony: here. W suwaku SDK przykładowy projekt będący przedmiotem zainteresowania można znaleźć pod adresem samples/S3_Uploader
.
Aby dostać się z tego projektu próbki do jednego, w którym dodany obraz jest publiczna, wystarczy dodać jedną linię w odpowiednim miejscu:
por.cannedACL = [S3CannedACL publicRead];
gdzie por
jest S3PutObjectRequest
używany do przesyłania obrazu. Kod
mój projekt za przesyłanie wygląda następująco (wygląda niemal identycznie do kodu Amazona próbki):
NSString *uuid = @""; // Generate a UUID however you like, or use something else to name your image.
UIImage *image; // This is the UIImage you'd like to upload.
// This URL is not used in the example, but it points to the file
// to be uploaded.
NSString *url = [NSString pathWithComponents:@[ @"https://s3.amazonaws.com/", AWS_PICTURE_BUCKET, uuid ]];
// Convert the image to JPEG data. Use UIImagePNGRepresentation for pngs
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
// Create the S3 Client.
AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:AWS_ACCESS_KEY_ID withSecretKey:AWS_SECRET_KEY];
@try {
// Create the picture bucket.
[s3 createBucket:[[S3CreateBucketRequest alloc] initWithName:AWS_PICTURE_BUCKET]];
// Upload image data. Remember to set the content type.
S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:uuid inBucket:AWS_PICTURE_BUCKET];
por.contentType = @"image/jpeg"; // use "image/png" here if you are uploading a png
por.cannedACL = [S3CannedACL publicRead];
por.data = imageData;
por.delegate = self; // Don't need this line if you don't care about hearing a response.
// Put the image data into the specified s3 bucket and object.
[s3 putObject:por];
}
@catch (AmazonClientException *exception) {
NSLog(@"exception");
}
AWS_ACCESS_KEY_ID
i AWS_SECRET_KEY
są, oczywiście, poświadczenia AWS i AWS_PICTURE_BUCKET
to obraz wiadro.
miałem nadzieję na więcej roztworu typu CDN, co uważałem, że S3 przewidziano ... W pewnym sensie mogę przesłać zdjęcie, upublicznij , a teraz przechowuj publicznie widoczny adres URL obrazu, który jest widoczny pod warunkiem, że znasz adres URL ... – belsokar
Czy mogę w jakiś sposób ustawić "wiadro", aby był publicznie dostępny, aby można było wyświetlić dowolny obiekt dodany do tego zasobnika? W takim przypadku po prostu utworzyłbym wiadro zatytułowane "myprofileimages" i w jakiś sposób skonfigurowałem politykę uprawnień, aby umożliwić każdemu tylko przeglądanie przedmiotów? – belsokar
http: // stackoverflow.com/questions/24349088/access-denied-while-uploading-file-from-ios-app-to-amazon-server-bucket Proszę, sprawdź to pytanie, ponieważ mam problemy z niektórymi problemami. –