无法通过XHR上传由cordova-plugin-file创建的二进制File对象

时间:2018-10-09 20:59:39

标签: cordova cordova-plugins html5-filesystem cordova-plugin-file

环境

科尔多瓦8.1.1(cordova-lib@8.1.0)
Android 7.1.1

问题

当我们尝试从设备的本地文件系统中检索图像并通过xhr发送产生的File对象时,二进制数据不存在于POST主体中。 Cordova文件对象的有效载荷产生[object Object]

代码

项目复制问题:https://github.com/lightbeard/cvfileIssue

      fetch("https://cdn.pixabay.com/photo/2017/07/10/23/43/question-mark-2492009_1280.jpg")
        .then(response => response.blob())
        .then(blob => {

           // test 1
           xhr(blob, 'http://example.com/process-jsfile');

           // test 2
           writeFile('test2.jpg', blob)
           .then(_ => {
             getFile('test2.jpg')
             .then(file2 => {
               xhr(file2, 'http://example.com/process-cvfile');
             });
           });
        });
      });

      function xhr(data, url) {
        const http = new XMLHttpRequest();
        http.open('POST', url, false);
        http.setRequestHeader('Content-type', 'img/jpeg');
        http.send(data);
      }

      function writeFile(filename, blob) {
        return new Promise(resolve => {
          window.resolveLocalFileSystemURL(cordova.file.dataDirectory, dataDir => {
              dataDir.getFile(filename, {create:true, exclusive: false}, file => {
                file.createWriter(fileWriter => {
                    fileWriter.onwriteend = resolve;
                    fileWriter.write(blob);
                });
              });
          });
        });
      }

      function getFile(filename) {
        return new Promise(resolve => {
          window.resolveLocalFileSystemURL(cordova.file.dataDirectory, dataDir => {
              dataDir.getFile(filename, {create: false}, fileEntry => {
                fileEntry.file(resolve);
              });
          });
        });
      }

Test1结果(好的)

working

Test2结果(错误)

broken

0 个答案:

没有答案