2

このまだ答えられていない質問に続いて、問題がどこにあるかを確認するためにいくつかのテストを実行しました-自分側またはサーバー側。

画像コーデックの問題である可能性があることを考慮して、text/plainポストメソッドを使用してサーバーにファイルをアップロードしようとしました。

readAsText()まず、メソッドを呼び出してファイルが存在することを確認しました。

function onDeviceReady() {
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
    }

      function gotFS(fileSystem) {
          fileSystem.root.getFile("textfile.txt", null, gotFileEntry, fail);
      }

      function gotFileEntry(fileEntry) {
          fileEntry.file(gotFile, fail);
      }

      function gotFile(file){
          readDataUrl(file);
          readAsText(file);
      }

      function readDataUrl(file) {
          var reader = new FileReader();
          reader.onloadend = function(evt) {
              alert("Read as data URL");
              alert(evt.target.result);
          };
          reader.readAsDataURL(file);
      }

      function readAsText(file) {
          var reader = new FileReader();
          reader.onloadend = function(evt) {
              alert("Read as text");
              alert(evt.target.result);
          };
          reader.readAsText(file);
      }

      function fail(evt) {
          alert(evt.target.error.code);
      }

テキスト ファイルの URL とテキスト ファイルの内容が記載されたアラートを受け取った後、これが自分のファイルであることがわかりました。今、私はそれをアップロードしています:

function gotFile(file){
          // alert('gotFile')
          // readDataUrl(file);
          // readAsText(file);
          alert(file.fullPath)
          uploadText(file.fullPath)
      }

function uploadText(fileURI) {
     alert('uploading file...')
      function win(r) {
        alert("Code = " + r.responseCode);
        alert("Response = " + r.response);
        alert("Sent = " + r.bytesSent);
    }

    function fail(error) {
        alert("An error has occurred: Code = " + error.code);
        alert("http_status = " + error.http_status);
        alert("upload error source " + error.source);
        alert("upload error target " + error.target);
    }

      var options = new FileUploadOptions();
      options.fileKey = "file";
      options.fileName = fileURI.substr(fileURI.lastIndexOf('/') + 1);
      options.mimeType = "text/plain";

      var ft = new FileTransfer();
      ft.upload(fileURI, encodeURI("https://mysecureurl.com/?filename="+options.fileName), win, fail, options);
    }

fileTransfer エラー コード 1 (ファイルが見つかりません) と http ステータス コード 411 (不正な形式の要求) が表示されます。

fileTransfer私は自分のAndroidプロジェクトを含むすべての許可を持っています<access origin="*"/>. 私のサーバー管理者は、リクエストを受け取ったと言いますが、phonegap からファイルを送信しているときに途中で何かが壊れており (通常のブラウザーのリクエストとは異なります)、彼はそれが何であるかを理解できませんでした。

私は本当にここで立ち往生しています。私が認識していない PhoneGap の制限はありますか? または、電話の http 本文リクエストをキャプチャしてデバッグできるようにする方法はありますか?

4

2 に答える 2

0

これは Android プラットフォームで発生し、iOS ではうまくいったので、options.chunkedMode=falseAndroid だけで設定してみてください(chunkedMode オプションのデフォルトは true です)https://github.com/apache/cordova-plugin-file-transfer/pull/141#issuecomment-291776345を参照してください

于 2018-01-30T14:20:15.040 に答える