由于我没有得到答案,我继续挖掘 phoneGap 文档并最终得到了答案。以下是我的代码示例。注意文件扩展名识别方法取自这里
我的 html(在 phoneGap 应用程序中)页面中有一个按钮控件,如下所示,任何人都可以从这里参考 phoneGap 文档。太有用了。我用的是2.9.0版本
<button onclick="getPhoto(Camera.pictureSource.PHOTOLIBRARY);">From Photo Library</button>
在我的 javascript 中,我有如下函数 getPhoto()
function getPhoto(source)
{
// Retrieve image file location from specified source
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 100,
destinationType: navigator.camera.DestinationType.NATIVE_URI, sourceType: source });
}
一旦选择了一张照片,该代表将被调用
function onPhotoURISuccess(imageURI) {
// Get image handle
var largeImage = document.getElementById('largeImage');
// Unhide image elements
largeImage.style.display = 'block';
// Show the captured photo
// The inline CSS rules are used to resize the image
largeImage.src = imageURI;
checkFileExtention(imageURI);
}
checkFileExtention() 函数异步调用原生端的文件扩展名检查方法。为简单起见,我只发布应用程序逻辑部分
//functions checks the type of the image passed
- (NSString *)contentTypeForImageData:(NSString *)imageUrl
{
NSURL *imageURL = [NSURL URLWithString:imageUrl];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
uint8_t c;
[imageData getBytes:&c length:1];
switch (c)
{
case 0xFF:
return @"image/jpeg";
case 0x89:
return @"image/png";
case 0x47:
return @"image/gif";
case 0x49:
case 0x4D:
return @"image/tiff";
case 0x42:
return @"@image/bmp";
}
return nil;
}
获取 FILE_URI 时,它会在本地保存图像并发送如下所示的 URI file://localhost/Users/user/Library/Application%20Support/iPhone%20Simulator/6.0/Applications/B50E3AD6-74F8-43F6-9F91-F28D2B06DF62 /tmp/cdv_photo_116.jpg
显然,文件类型是隐藏的,因为它总是显示为 jpg
当使用 NATIVE_URI 时,它看起来像这样 assets-library://asset/asset.JPG?id=5CF16D20-9A80-483A-AC1C-9692123610B1&ext=JPG 注意上面的 uri 显示 JPG 因为图像是 JPG,否则是真实文件显示所选图像的扩展名。
最终,如果将本机 uri 发送到 contentTypeForImageData 函数,它会给我正确的输出