gpt4 book ai didi

ios - 需要帮助从 iOS 设备上传多个大图像

转载 作者:可可西里 更新时间:2023-11-01 05:56:41 25 4
gpt4 key购买 nike

我使用 alasset 库成功地获取了我的 iphone 图片库中的所有图片 url 并存储在一个数组中。现在我正在尝试上传到服务器,这是我的代码:

我尝试了两种方法,但都在迭代大约 10 张图像后崩溃,没有任何崩溃日志。图片不上传到服务器,上传前崩溃。

1:

NSData *imgData; UIImage *img; NSInputStream *stream;

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://my.url.com"]];

for(int i=0; i<_dataContainer.count; i++)
{
img = [UIImage imageWithCGImage:[[[_dataContainer objectAtIndex:i] defaultRepresentation]fullResolutionImage]];
imgData = UIImageJPEGRepresentation(img, 1.0);
stream = [[NSInputStream alloc] initWithData:imgData];
[request setHTTPBodyStream:stream];
[request setHTTPMethod:@"POST"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSLog(@"Finished with status code: %i", [(NSHTTPURLResponse *)response statusCode]);
}];
}

2:使用 Afnetworking

AFHTTPClient *client= [[AFHTTPClient alloc]initWithBaseURL:[NSURL URLWithString:@"http://my.url.com"]];
NSURLRequest *myRequest;
__block UIImage *img;
__block NSData *imgData;
__block NSString *fName;


myRequest = [client multipartFormRequestWithMethod:@"POST" path:@"/images/mypage.php" parameters:nil constructingBodyWithBlock:
^(id <AFMultipartFormData>formData)
{
img = [UIImage imageWithCGImage:[[[_dataContainer objectAtIndex:0] defaultRepresentation]fullResolutionImage]];
imgData = UIImageJPEGRepresentation(img, 1.0);
fName = [self returnDateTimeWithMilliSeconds];

[formData appendPartWithFileData:imgData name:@"photo" fileName:[NSString stringWithFormat:@"%@.jpg",fName] mimeType:@"image/jpeg"];

NSLog(@"FN=>%@ | Size=>%@",fName, [NSByteCountFormatter stringFromByteCount:[imgData length] countStyle:NSByteCountFormatterCountStyleFile]);
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:myRequest];
[operation start];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{

NSLog(@"Success Data -> %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failed");
}];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Progrees -> %f", ((float)((int)totalBytesWritten) / (float)((int)totalBytesExpectedToWrite)));
}];

最佳答案

@interface MyHTTPClient : AFHTTPClient

+ (id)sharedClient;

@end

@implementation MyHTTPClient

+ (id)sharedClient
{
static MyHTTPClient *sharedClient;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedClient = [[MyHTTPClient alloc] initWithBaseURL:nil];
});
return sharedClient;
}

@end

@implementation MyViewController

- (void)uploadImages
{
NSURLRequest *myRequest;
__block UIImage *img;
__block NSData *imgData;
__block NSString *fName;


myRequest = [client multipartFormRequestWithMethod:@"POST" path:@"/images/mypage.php" parameters:nil constructingBodyWithBlock:
^(id <AFMultipartFormData>formData)
{
img = [UIImage imageWithCGImage:[[[_dataContainer objectAtIndex:0] defaultRepresentation]fullResolutionImage]];
imgData = UIImageJPEGRepresentation(img, 1.0);
fName = [self returnDateTimeWithMilliSeconds];

[formData appendPartWithFileData:imgData name:@"photo" fileName:[NSString stringWithFormat:@"%@.jpg",fName] mimeType:@"image/jpeg"];

NSLog(@"FN=>%@ | Size=>%@",fName, [NSByteCountFormatter stringFromByteCount:[imgData length] countStyle:NSByteCountFormatterCountStyleFile]);
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:myRequest];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{

NSLog(@"Success Data -> %@", operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failed");
}];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Progrees -> %f", ((float)((int)totalBytesWritten) / (float)((int)totalBytesExpectedToWrite)));
}];

[[MyHTTPClient sharedClient] enqueueHTTPRequestOperation:operation]
}

@end

关于ios - 需要帮助从 iOS 设备上传多个大图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13932036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com