двоичный объект File, созданный cordova-plugin-file, не может быть загружен через XHR - PullRequest
0 голосов
/ 09 октября 2018

Среда

Cordova 8.1.1 (cordova-lib@8.1.0)
Android 7.1.1

Проблема

Когда мы пытаемся извлечь изображение из локальной файловой системы устройства и отправить созданный объект Файл через xhr, двоичные данные отсутствуют в теле 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);
              });
          });
        });
      }

Результат теста 1 (все в порядке)

working

Результат теста 2 (неправильный)

broken

...