从图像URI创建Javascript文件/Blob对象

从图像URI创建Javascript文件/Blob对象,javascript,angularjs,cordova,firebase,firebase-storage,Javascript,Angularjs,Cordova,Firebase,Firebase Storage,是否可以使用图像URI为我的图像创建文件或Blob对象 使用我的移动应用程序上的插件Cordova Image Picker,我可以检索照片URI,如下所示:file:///data/user/0/..../image.jpg" 然而,我现在正试图创建一个文件或Blob对象,Google Firebase需要它才能上传我的图像。我就是不知道怎么做。我尝试的每个解决方案似乎都是错误的,以至于我认为我从一个完全错误的角度看待它。我是Javascript新手。非常感谢 看一看我不久前发布的一个问题,该

是否可以使用图像URI为我的图像创建文件或Blob对象

使用我的移动应用程序上的插件Cordova Image Picker,我可以检索照片URI,如下所示:file:///data/user/0/..../image.jpg"


然而,我现在正试图创建一个文件或Blob对象,Google Firebase需要它才能上传我的图像。我就是不知道怎么做。我尝试的每个解决方案似乎都是错误的,以至于我认为我从一个完全错误的角度看待它。我是Javascript新手。非常感谢

看一看我不久前发布的一个问题,该问题涉及到这一点,但针对视频(同样的原则适用):

您需要使用cordova的文件插件作为arrayBuffer读取,然后是blob;比如:

var file_path = "root/to/directory";
var name = "filename.jpg";

                $cordovaFile.readAsArrayBuffer(file_path, name)
                    .then(function (success) {
                        // success
                        console.log(success);

                      blob = new Blob([success], {type: "image/jpeg"});

                      console.log(blob);

                      var uploadTask = storageRef.child(name).put(blob);

                      uploadTask.on('state_changed', function(snapshot){
                        // Observe state change events such as progress, pause, and resume
                        // See below for more detail

                          var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
                          console.log('Upload is ' + progress + '% done'); 

                      }, function(error) {
                        // Handle unsuccessful uploads
                        console.log("Error uploading: " + error)
                      }, function() {
                        // Handle successful uploads on complete
                        // For instance, get the download URL: https://firebasestorage.googleapis.com/...
                        var downloadURL = uploadTask.snapshot.downloadURL;
                        console.log("Success!", downloadURL);
                      });

                      }, function (error) {
                        // error
                        console.log("Failed to read file from directory, error.code);

                      }

如果程序向您传递图像的完整路径,则需要将名称与存储图像的目录的路径分开。只需在期末考试后查找所有内容/

看看我不久前发布的一个问题,该问题涉及到这一点,但视频除外(同样的原则适用):

您需要使用cordova的文件插件作为arrayBuffer读取,然后是blob;比如:

var file_path = "root/to/directory";
var name = "filename.jpg";

                $cordovaFile.readAsArrayBuffer(file_path, name)
                    .then(function (success) {
                        // success
                        console.log(success);

                      blob = new Blob([success], {type: "image/jpeg"});

                      console.log(blob);

                      var uploadTask = storageRef.child(name).put(blob);

                      uploadTask.on('state_changed', function(snapshot){
                        // Observe state change events such as progress, pause, and resume
                        // See below for more detail

                          var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
                          console.log('Upload is ' + progress + '% done'); 

                      }, function(error) {
                        // Handle unsuccessful uploads
                        console.log("Error uploading: " + error)
                      }, function() {
                        // Handle successful uploads on complete
                        // For instance, get the download URL: https://firebasestorage.googleapis.com/...
                        var downloadURL = uploadTask.snapshot.downloadURL;
                        console.log("Success!", downloadURL);
                      });

                      }, function (error) {
                        // error
                        console.log("Failed to read file from directory, error.code);

                      }
如果程序向您传递图像的完整路径,则需要将名称与存储图像的目录的路径分开。只要在期末考试后寻找一切就行了