#objective-c #google-app-engine #ios7 #uiimagepickercontroller #multipartform-data
#objective-c #google-app-engine #ios7 #uiimagepickercontroller #multipartform-данные
Вопрос:
Я использую
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
чтобы выбрать «UIImagePickerControllerOriginalImage», тогда я просто сжимаю и загружаю в GCS.
-(void) saveImage: (NSData *)imageData forImageName: (NSString *) imageName
{
id customerObj=[[[SSAppCache cache]getObject:@"customerKey"].value JSONValue];
NSString *requestURL = [[NSString alloc] initWithFormat:@"%@",dbURL];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
NSString *imagePostUrl = [NSString stringWithFormat:@"%@/CustomerProfileService/uploadProfileImageAndUpdate", requestURL];
NSDictionary *parameters = @{@"email": [customerObj valueForKeyPath:@"emailId"] , @"custId":[customerObj valueForKeyPath:@"customerId"]};
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:imagePostUrl parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
double compressionRatio = 1.0;
NSData *imgData=UIImageJPEGRepresentation(defaultImage,compressionRatio);
while ([imgData length]>50000) {
compressionRatio=compressionRatio*0.5;
imgData=UIImageJPEGRepresentation(defaultImage,compressionRatio);
}
[formData appendPartWithFileData:imgData name:@"fileBytes" fileName:imageName mimeType:@"image/jpeg"];
}];
[request addValue:@"multipart/form-data" forHTTPHeaderField: @"Content-Type"];
DLog(@"Request URL is:%@",request);
AFHTTPRequestOperation *op = [manager HTTPRequestOperationWithRequest:request success: ^(AFHTTPRequestOperation *operation, id responseObject) {
DLog(@"response: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
DLog(@"Error: %@ operation Response code:%ld" , error,(long)[operation.response statusCode]);
}];
op.responseSerializer = [AFHTTPResponseSerializer serializer];
[[NSOperationQueue mainQueue] addOperation:op];
}
У меня есть метод Java Service следующим образом, через
public String uploadProfileImageAndUpdate(String email,String custId ,byte[] fileBytes) throws Exception
{
...
String filepath = GoogleStorageUtil.uploadFile(fileBytes, "<BUCKET DETAILS>", "<FOLDER>" fileName, "image/jpeg");
}
Но это даже не попадает ….. 🙁
public static String uploadUsingGcs(byte[] fileBytes,String bucketName,String objectName,String mimeType)
{
String filePath = null;
try
{
mLogger.info("into the method to upload file " objectName " to " bucketName);
filePath=GOOGLE_CLOUD_STORAGE_URL "/" bucketName "/" objectName;
GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder().initialRetryDelayMillis(10).retryMaxAttempts(10).totalRetryPeriodMillis(15000).build());
GcsFilename filename = new GcsFilename(bucketName, objectName);
GcsFileOptions options = new GcsFileOptions.Builder().cacheControl("max-age=31557600").mimeType(mimeType).acl(ACL_PUBLIC_READ).build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename,options);
writeChannel.write(ByteBuffer.wrap(fileBytes));
writeChannel.close();
mLogger.info("File successfully uploaded");
}
catch(Exception e){
mLogger.warning("The error came becoz of " e.getMessage());
for(StackTraceElement s:e.getStackTrace()){
mLogger.warning(s.toString());
}
}
return filePath;
}
Я не могу загрузить изображения, я перепробовал все типы, такие как Multipart, Json, String и т.д., Ничего не работает. Нет ошибки, предупреждения и т.д… Это спокойно: (Моя целевая версия ios 7.0 выше, я знаю, что проблема в какой-то глупости, помогите мне это выяснить. Спасибо 🙂
Ответ №1:
Вы уверены, что файлы не загружены или что, возможно, у них нет ожидаемого разрешения и, следовательно, они не читаются? (Интересно, может ли разрешение корзины иметь какое-то отношение к части чтения). Видите ли вы что-нибудь в журнале приложений App Engine, связанном с запросом на загрузку? Является ли значение ACL_PUBLIC_READ «общедоступным для чтения»? К вашему сведению, в вашем случае, когда доступны все данные, было бы лучше написать это так: gcsService.createOrReplace(имя файла, параметры, );
Комментарии:
1. Да, я проверил все разрешения GCS и т.д… Я могу загружать изображения из браузера. Но связь между приложением через веб-службу является проблемой. Проблема только в составных частях, загрузка изображений. 🙁