我试图下载用户' Facebook个人资料图片到本地存储,以便我可以显示它而无需重新调用Facebook。
我使用模块image-source
下载图片,使用模块file-system
访问设备的本地存储空间。
大部分代码都引用the Nativescript image-source
documentation page。
var imageSource = require("image-source");
var fs = require("file-system");
exports.theFunction = function(args){
//...
var img = imageSource.fromFile("http://graph.facebook.com/"+user.id+"/picture?type=large");
var folder = fs.knownFolders.documents();
var path = fs.path.join(folder.path, "profilePic.jpg");
console.log(path);
var saved = img.saveToFile(path, enums.ImageFormat.jpg);
appSettings.setString("imgLocal",path);
console.log("Image Saved Successfully");
//...
}
/data/user/0/com.foo.bar/files/profilePic.jpg
我从未见过"图像成功保存"消息输出到控制台,我无法使用模拟器验证图像是否已存储在文件系统中(我在没有设备的情况下开发Android)。
我还尝试将保存事件包装在if
标记中,假设saveToFile()
的输出是布尔值:
if(img.saveToFile(path, enums.ImageFormat.jpg)) console.log("success");
else console.log("failure");
......但是这也没有输出任何内容。
如何将图像从URL保存到设备的本地存储?
参考
答案 0 :(得分:0)
我认为这里的主要问题在于该行,因为ImageSource仅适用于本地文件,而不是网址:
var img = imageSource.fromFile("http://graph.facebook.com/"+user.id+"/picture?type=large");
你应该下载图片,而不是从网址设置来源。关于下载图像,您可以在这里阅读:
https://docs.nativescript.org/cookbook/ui/image-cache
或尝试这样的事情并以某种方式保存:
var image = new ImageModule.Image();
image.src = "https://www.google.com/images/errors/logo_sm_2.png";
但关于这一点,我不太确定。我从未使用过nativescript,只是浏览了文档。