当我上传到服务器时,UIImageWriteToSavedPhotosAlbum 图片使我的应用程序崩溃

Posted

技术标签:

【中文标题】当我上传到服务器时,UIImageWriteToSavedPhotosAlbum 图片使我的应用程序崩溃【英文标题】:UIImageWriteToSavedPhotosAlbum pictures crash my app when I upload to server 【发布时间】:2010-02-08 04:01:01 【问题描述】:

我正在创建的应用程序通过四种方式上传图片(第四种是测试功能);

1.直接从 UIImagePickerController 与 UIImagePickerControllerSourceTypeCamera 像这样:

//didFinishPickingImage method
if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera)

UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);


CGRect myImageRect = CGRectMake(30.0f, 190.0f, 250.0f, 210.0f); 
myImage = [[UIImageView alloc] initWithFrame:myImageRect];
//released in dealloc because I reuse it alot

myImage.image = img;
[self.view addSubview:myImage]; 

2.直接从照片库中挑选也使用

myImage.image = img;

3.使用从1保存的图像。

pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/"; 
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName];
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath];  

UIImage *img = [UIImage imageWithContentsOfFile:ImagePath];

myImage.image = img;

4.作为测试功能:使用iPhone默认相机应用拍摄的图像(与UIImagePickerController相同)但使用ImagePath而不是UIImagepickerController、UIImagePickerControllerSourceTypePhotoLibrary。

//Same as Number 3.
pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/"; 
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName];
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath];  

UIImage *img = [UIImage imageWithContentsOfFile:ImagePath];

myImage.image = img; 

*到这里,用户可以在屏幕上以四种方式中的任何一种方式看到文件添加到 UIImageView 的 myImage 实例中(取决于用户选择)。这证明我选择了正确的文件(三个和四个)。

//uploading function

NSData *imageData = UIImageJPEGRepresentation(myImage.image, 1.0);


NSMutableURLRequest *request2 = [[[NSMutableURLRequest alloc] init] autorelease];
            [request2 setURL:[NSURL URLWithString:urlString]];
            [request2 setHTTPMethod:@"POST"];

NSMutableData *body = [NSMutableData data];
//... append boundary, content-disposition code etc here.
[body appendData:[NSData dataWithData:imageData]];
[request setHTTPBody:body];

问题是,在上传时,数字 1,2 和 4 有效,数字 3 无效。

控制台输出; 程序接收信号:“EXC_BAD_ACCESS”

我知道此输出源于尝试访问已释放对象,并且我在其他情况下遇到并解决了此问题。但即使在重新检查了我的内存分配之后,也没有找到任何方法。

我非常感谢解决此问题的方法。

【问题讨论】:

你是如何在 #3 中找到 imageFileName 的?你在检查你是否得到一个有效的图像? imageData 是否有效,如果您在调试器中检查它,它是否表示合理的字节数? 我通过遍历数组来获取 imageFileName 。 . . NSArray directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:ImagePath];是的。这是一个有效的图像,它分配了 5763072 个字节,由方法 create_image(CGImage,...) 创建 【参考方案1】:

iPhone OS 创建了另一个文件夹“/private/var/mobile/Media/DCIM/101APPLE/”,不同于默认的 100APPLE。

我意识到,实际上有时照片也保存在 999APPLE、102APPLE 等文件夹中。这取决于您如何在“相机胶卷”中删除、复制和创建照片。

因此,您的相机胶卷照片实际上可以存储在许多不同的文件夹中。

因此,无法执行[NSData dataWithContentsOfFile:ImagePath];,会抛出异常:

“EXC_BAD_ACCESS”

【讨论】:

以上是关于当我上传到服务器时,UIImageWriteToSavedPhotosAlbum 图片使我的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 XAMPP 将图像上传到服务器时出现问题

如何在android中以编程方式上传到服务器之前减小视频的大小[关闭]

如何使用 multer 模块将图像上传到 mongodb

Python:将文件上传到ftp问题

将图像上传到 S3 时遇到内部服务器错误 500

上传到实时服务器后,setcookie 不起作用