公司做个app项目,用phonegap做,好调页面,哎,就是骗那些土大款客户,觉得phonegap性能一般吧,不过html5的确好强大,页面设计好了看起来也好看。原生的用的不多,比如什么二维码扫描啊,上传文件啥的就要用到,使用phonegap的函数调用原生的插件。前几天遇到个上传文件的头疼事儿,以前做的上传文件都是直接打开本地图片文件库,选择好图片后文件上传,然后服务端返回一个图片的服务器地址,用js显示在html上。现在设计前端的是直接使用phonegap的函数打开函数库选择图片后得到图片在手机上的链接最后确定添加后才批量上传到服务器。这里有个问题就是最后我要使用phonegap返回的图片的地址去调用原生的插件发送。那么问题来了,phonegap得到的是asset-library的链接地址,而不是真实的在手机上得路径,我使用的是asi来发送图片,发送文件需使用文件路径或者文件的数据才行。搞了半天弄死找不到啊,使用它返回的是得不到图片数据的。最后网上找了半天,看了下asset-library是个啥,可以通过asset url获取alasset的数据。
ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init]; [lib assetForURL:[NSURL URLWithString:assetUrl] resultBlock:^(ALAsset *asset) { //在这里使用asset来获取图片 } failureBlock:^(NSError *error) {} ];
或者:
+ (UIImage *)fullResolutionImageFromALAsset:(ALAsset *)asset { ALAssetRepresentation *assetRep = [asset defaultRepresentation]; CGImageRef imgRef = [assetRep fullResolutionImage]; UIImage *img = [UIImage imageWithCGImage:imgRef scale:assetRep.scale orientation:(UIImageOrientation)assetRep.orientation]; return img; }
两种方法得到原数据。
使用asset库需要插入asset框架,asset.framework。
使用asi发送图片:图像数据保存在数组里面,
for (UIImage* image in m_imgArray) { NSData* data = UIImageJPEGRepresentation(image, 50); NSString* strFileKey = [NSString stringWithFormat:@"goodsImageFileList[%d]",i]; NSString* strKey = [NSString stringWithFormat:@"goodsImageList[%d].id",i]; [req setData:data withFileName:@"photo.jpg" andContentType:@"image/jpeg" forKey:strFileKey]; [req setPostValue:@"u" forKey:strKey]; i++; }
fileName无所谓,content-type设置为image/jpeg,key可以设为相同。加一句,我使用的是第一种方法,它回调回得有点儿慢,我用一个全局数组来保存回调后的图像数据,然后再统一发送。ok了。。