加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 使用XHR而不是File Transfer Plugin的Ionic Cordov

发布时间:2020-12-17 18:11:13 所属栏目:安全 来源:网络整理
导读:我在Ionic 1(Angular 1.3)中使用Cordova Camera Plugin,我需要将此图像上传到服务器.由于现在不推荐使用cordova-plugin-file-transfer,建议现在使用xhr和cordova-plugin-file上传文件,我仍然坚持如何继续.我找不到任何这方面的例子,我读到的 link对我如何上
我在Ionic 1(Angular 1.3)中使用Cordova Camera Plugin,我需要将此图像上传到服务器.由于现在不推荐使用cordova-plugin-file-transfer,建议现在使用xhr和cordova-plugin-file上传文件,我仍然坚持如何继续.我找不到任何这方面的例子,我读到的 link对我如何上传从Cordova Camera Plugin获取的imageUrl没有帮助.这是我到目前为止:

function openCamera() {
            var options = {
                  quality: 50,destinationType: Camera.DestinationType.FILE_URI,sourceType: Camera.PictureSourceType.CAMERA,allowEdit: true,encodingType: Camera.EncodingType.JPEG,mediaType: Camera.MediaType.PICTURE,correctOrientation: true 
            }
            var func = fileTransfer;

            navigator.camera.getPicture(function cameraSuccess(imageUri) {
                console.log(imageUri);
                // Upload the picture
                func(imageUri);

            },function cameraError(error) {
                console.debug("Unable to obtain picture: " + error,"app");

            },options);
}

function fileTransfer(imageUri) {
          window.requestFileSystem(LocalFileSystem.PERSISTENT,function (fs) {
              console.log('file system open: ' + fs.name);
              fs.root.getFile(imageUri,{ create: true,exclusive: false },function (fileEntry) {
                  fileEntry.file(function (file) {
                      var reader = new FileReader();
                      reader.onloadend = function() {
                          // Create a blob based on the FileReader "result",which we asked to be retrieved as an ArrayBuffer
                          var blob = new Blob([new Uint8Array(this.result)],{ type: "image/jpg" });
                          var oReq = new XMLHttpRequest();
                          var server = 'http://serverurl.com/upload.php';
                          oReq.open("POST",server,true);
                          oReq.onload = function (oEvent) {
                              // all done!
                          };
                          // Pass the blob in to XHR's send method
                          oReq.send(blob);
                      };
                      // Read the file as an ArrayBuffer
                      reader.readAsArrayBuffer(file);
                  },function (err) { console.error('error getting fileentry file!' + JSON.stringify(err)); });
              },function (err) { console.error('error getting file! ' + JSON.stringify(err)); });
          },function (err) { console.error('error getting persistent fs! ' + JSON.stringify(err)); });
}

我理解fileTransfer()在这里是错误的,因为我刚刚使用了我在链接中读到的东西而且我不能期望神奇地工作.我不知道如何使用我从navigator.camera.getPicture获得的imageUrl并在Angular 1.3中使用Ajax上传它.

上面的代码在获取文件时出错! { “代码”:5}.

有谁可以帮助我吗?

解决方法

您可以尝试以下解决方案,而不是使用文件路径.

function b64toBlob(b64Data,contentType,sliceSize) {

        contentType = contentType || '';
        sliceSize = sliceSize || 512;

        var byteCharacters = atob(b64Data);
        var byteArrays = [];


        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
            var slice = byteCharacters.slice(offset,offset + sliceSize);

            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {

                byteNumbers[i] = slice.charCodeAt(i);
            }

            var byteArray = new Uint8Array(byteNumbers);

            byteArrays.push(byteArray);
        }

        var blob = new Blob(byteArrays,{ type: contentType });
        return blob;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读