Per risolvere questo problema, ho iniziato con il codice di esempio di Amazon nel loro SDK iOS, trovato here. Nell'SDK zip, il progetto di esempio di interesse può essere trovato a samples/S3_Uploader
.
di ottenere da quel progetto di esempio a quello in cui l'immagine caricata è pubblico, è sufficiente aggiungere una riga al posto giusto:
por.cannedACL = [S3CannedACL publicRead];
dove por
è il S3PutObjectRequest
utilizzato per caricare l'immagine. Codice
Il mio progetto per il caricamento assomiglia a questo (sembra quasi identico al codice di esempio di Amazon):
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
e AWS_SECRET_KEY
sono, naturalmente, le credenziali AWS, e AWS_PICTURE_BUCKET
è la tua foto secchio.
fonte
2012-08-13 19:23:30
speravo in più di una soluzione di tipo CDN, che ho pensato S3 previsto ... In un certo senso, ho caricare un'immagine, renderlo pubblico e ora memorizza un URL immagine pubblicamente visualizzabile visualizzabile finché conosci l'URL ... – belsokar
In alternativa, posso in qualche modo configurare un "bucket" per essere accessibile pubblicamente, in modo che qualsiasi oggetto aggiunto a quel bucket sia visualizzabile? In questo caso, creerei solo un bucket intitolato "myprofileimages" e in qualche modo impostare un criterio di autorizzazione per consentire a chiunque di visualizzare solo gli elementi? – belsokar
http: // stackoverflow.it/questions/24349088/accesso-negato-while-upload-file-da-ios-app-to-amazon-server-bucket si prega di controllare questa domanda perché sto affrontando alcuni problemi –