【问题标题】:Ionic - Upload file to FTP serverIonic - 上传文件到 FTP 服务器
【发布时间】:2015-10-20 10:08:01
【问题描述】:

我正在开发 Ionic 应用程序,我需要将文件上传到 FTP 服务器。 请注意,我一般是移动开发新手,尤其是 Ionic。 目标是 iO。

我找到了很多关于 this cordova plugin 的信息,但我仍然无法将我的文件推送到我的 FTP 服务器。我想知道 Ionic 是否有可能......

你们有解决办法吗?你觉得有可能吗?

这是我的代码:

.controller("CsvCtrl", function($scope, $cordovaFileTransfer, $ionicLoading) { 
$scope.upload = function() {
  var options = {
    fileKey: "avatar",
    fileName: "test.png",
    chunkedMode: false,
    mimeType: "image/png",
    params: {
      value1: "<FTP_LOGIN>",
      value2: "<FTP_PASSWORD>"
    }
  };
  window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
    fs.root.getDirectory(
        "AppDirectory",
        {
            create: false
        },
        function(dirEntry) {
            dirEntry.getFile(
                "test.png", 
                {
                    create: false, 
                    exclusive: false
                }, 
                function gotFileEntry(fe) {
                    $ionicLoading.hide();
                    $cordovaFileTransfer.upload("ftp://MY_URL/", fe.toURL(), options).then(function(result) {
                      console.log("SUCCESS: " + JSON.stringify(result.response));
                    }, function(err) {
                      console.log("ERROR: " + JSON.stringify(err));
                    }, function (progress) {
                      // constant progress updates
                    });
                }, 
                function(error) {
                    $ionicLoading.hide();
                    console.log("Error getting file");
                }
            );
        }
    );
  },
  function() {
    $ionicLoading.hide();
    console.log("Error requesting filesystem");
  });
}
})

这是我得到的错误:

2015-10-20 11:24:43.564 POC [1127:297648] FileTransferError {
  body = "";
  code = 3;
  "http_status" = 0;
  source = "file:///var/mobile/Containers/Data/Application/DE05616B-1FA2-47E2-972C-9A773480C2ED/Documents/AppDirectory/test.png";
  target = "ftp://MY_URL/";
}
2015-10-20 11:24:43.564 POC [1127:297648] File Transfer Error: You do not have permission to access the requested resource.
2015-10-20 11:24:43.571 POC [1127:297608] ERROR: {"code":3,"source":"file:///var/mobile/Containers/Data/Application/DE0561    6B-1FA2-47E2-972C-  9A773480C2ED/Documents/App/test.png","target":"ftp://MY_URL/","http_status":null,"body":null,"exception":null}

提前感谢您的帮助。

问候

【问题讨论】:

  • 有可能!任何代码示例?有什么错误吗?
  • 我只尝试按照本教程进行操作:blog.nraboy.com/2015/01/…,但在尝试上传文件时出现权限被拒绝错误。想知道如何提供凭据...
  • @JulienMartelli 确实找到了任何解决方案,因为如果您在此*.com/questions/36981211/… 中熟悉 ftp 帮助,我也会陷入困境。

标签: cordova ftp ionic-framework ionic ngcordova


【解决方案1】:

如果您的服务器需要 HTTP 基本身份验证,我可以想到两个选项:

  1. 将凭据放入 url ftp://username:password@url
  2. 直接设置自定义headeroptions.headers = {'Authorization': base64('username' + ':' + 'password') };

请注意,base64 必须是这样对凭据进行编码的函数:

base64= function(credentials) {
    var hash = btoa(credentials);
    return "Basic " + hash;
};

【讨论】:

  • 感谢您的回答。我试过你的解决方案,我得到了这个:2015-10-20 17:32:48.897 POC Carmilia [1177:317314] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** setObjectForKey:对象不能nil (key: headers)' 顺便说一句,我在 iPad 上运行我的应用程序,我要编辑我的帖子。