【问题标题】:File upload using cordova-plugin-file-transfer not working on Android, only on iOS使用 cordova-plugin-file-transfer 上传文件在 Android 上不起作用,仅在 iOS 上起作用
【发布时间】:2017-06-12 07:08:42
【问题描述】:

有人知道可能是什么问题吗?在过去的几周里,我一直在试图弄清楚为什么我的代码只能在 iOS 上运行,而不能在 Android 设备上运行。任何想法都会受到高度赞赏,因为我没有选择。

在 android 设备上它显示发送文件,但在服务器上我没有收到任何信息(图片也没有其余参数)。另一方面,在 iOS 上一切正常,服务器也一样。

我的代码:

home.html:

<button ion-button color="dark" (click)="takePhoto()">Open camera </button>
<img [src]="imageURL" *ngIf="imageURL" />
<br>imageURL={{imageURL}}
<br><button ion-button color="dark" (click)="upload()">Upload</button>

home.ts:

@Component({
      selector: 'page-home',
      templateUrl: 'home.html'
})
export class HomePage {
    imageURL: any;
    myInput: string;
    cameraUrl: string;

    constructor(public navCtrl: NavController) {
    }

   takePhoto(){
       Camera.getPicture().then((imageData) => {
            this.imageURL = imageData;
       }, (err) => {
            console.log(err);
       });
   }
   upload(){
       var ft = new Transfer();
       var options = {
       fileKey: 'file',
       fileName: 'filename.jpg',
       params:{operatiune:'uploadpoza'}
   }
   ft.upload(this.imageURL,encodeURI("https://www.myserver.com/test.php"),options)
       .then((data) => {
            // success
            alert("image send:"+this.imageURL);
        }, (err) => {
          // error
          alert("err: "+JSON.stringify(err));
        })
    }
}

我通过两种方式检查了错误:

案例一:

我上传的代码中有 2 个警报: 一种。成功时的消息:alert("image send:"+this.imageURL); 湾。错误消息:alert("err: "+JSON.stringify(err));

就我而言,我注意到只有第一条消息出现,即 代码执行正确。

案例 2:

我已通过电缆将手机连接到笔记本电脑。 要启动应用程序,我输入了“Node.js-Command-Prompt”命令“ionic run 安卓”。 我打开 Chrome 浏览器并在地址栏中输入 “铬://检查/#devices”。然后为我的应用选择“INSPECT-option”,然后 弹出控制台。控制台没有显示任何错误。 这是测试它的正确方法,还是我应该尝试不同的方法?

我打印了“ft.upload”成功时收到的对象“数据” 功能。结果是:

data.response=
data.responseCode=200
data.bytesSent=411240

对我来说,这意味着信息被发送到服务器。

还有一点: - 我运行了不同类型的测试:向两台服务器发送信息 使用 HTTPS 和 HTTP - 我尝试添加 trustAllHosts=true 并在另一个测试中 trustAllHosts=false

而且每次都出现同样的问题:在 iOS 上有效,但在 android 上失败

【问题讨论】:

    标签: android cordova ionic2


    【解决方案1】:

    尝试在配置中设置chunkedMode false。

       var options = {
       chunkedMode: false,
       fileKey: 'file',
       fileName: 'filename.jpg',
       params:{operatiune:'uploadpoza'}
    

    【讨论】:

    • 完美,它正在工作。太感谢了。此设置解决了我的问题并结束了一系列搜索和测试。
    • 你是我的英雄!
    • chunkedMode: true, 一直在工作,但从昨天开始图像无法工作,但这解决了问题,必须更新应用程序。
    • chunkedMode 设置为 false 对我没有帮助。我有一个正在生产的应用程序,我需要尽快解决这个问题。显然,文件上传在我的本地开发机器上工作正常,因为它们是通过 HTTP 发布的。但是当我通过 HTTPS 文件上传针对我们的生产服务器时,会出现以下错误:[boringssl_session_write] SSL_ERROR_SYSCALL:库外部操作失败。我在 XCode 的调试控制台中得到了这个。有人可以澄清一下吗。这是一个可怕的问题。我什至不确定出了什么问题,挣扎了好几个小时。
    【解决方案2】:

    试试这个:

    var onUploadSuccess = function (r) {
         clearCache();
         alert(JSON.stringify(r));      
    }
    
    var onUploadFailed = function (error) {
         alert(JSON.stringify(r));
    }
    
    var options = new FileUploadOptions();
    options.fileKey = "file";
    options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1);
    options.mimeType = "image/jpeg";
    
    var params = new Object();
    params.action = "some value";//=== if u want to send some other parameters
    
    options.params = params;
    options.chunkedMode = false;
    
    var ft = new FileTransfer();
    
    ft.upload(imageURI, SITE_URL+"upload.php", onUploadSuccess, onUploadFailed, options);
    

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多