Невозможно загрузить изображения в GCS из Xcode

#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 и т.д… Я могу загружать изображения из браузера. Но связь между приложением через веб-службу является проблемой. Проблема только в составных частях, загрузка изображений. 🙁