簡體   English   中英

Cordova文件傳輸未命中服務器端點

[英]Cordova File-Transfer Not Hitting Server Endpoint

我正在嘗試使用FT(cordova文件傳輸)創建文件以將文件發送到我的Express應用程序。 問題是,快遞沒有收到請求。 在某種程度上它起作用了,但是它停止了工作,我試圖找出原因。

我的代碼如下所示。

首先,我用cordova lib拍照,可以正常工作。

    $scope.takePicture = function(){
          Camera.getPicture().then(function(imageURI) {
            $scope.lastPhoto = imageURI;
            upload(imageURI)
          }, function(err) {
            console.err(err);
          }, {
            quality: 25,
            targetWidth: 320,
            targetHeight: 320,
            saveToPhotoAlbum: false
          });
    };

但是,上載功能不會向快速服務器發送請求。

upload = function (imageURI) {
    var ft = new FileTransfer();
    var options = new FileUploadOptions();

    options.fileKey = "photo";
    options.fileName = 'filename'; // We will use the name auto-generated by Node at the server side.
    options.mimeType = "image/jpeg";
    options.chunkedMode = false;
    options.httpMethod = 'put';
    options.params = { // Whatever you populate options.params with, will be available in req.body at the server-side.
        "description": "Uploaded from my phone"
    };

    ft.upload(imageURI, encodeURI(RESOURCES.PRODUCTION_DOMAIN + '/api/boats/' + $scope.boat._id),
        function (e) {
            console.log('File Transfer Completed', e)
        },
        function (e) {
            alert("Upload failed", e);
        }, options);
}

我沒有看到請求進入我的服務器,並且看到失敗的console.log。

為什么是這樣?

我的服務器具有以下訪問控制方法

    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, POST', 'PUT', 'DELETE');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header('Access-Control-Allow-Credentials', true);
    next();

我有

    <access origin="*"/>

在我的應用程序的config.xml中。

為什么請求沒有通過!?

編輯

使應用程序以X代碼運行(下載新版本...)后,我看到錯誤如下。

2015-10-26 05:00:54.955 Fish App[358:68325] File Transfer Finished with response code 404
2015-10-26 05:00:54.956 Fish App[358:68325] FileTransferError {
    body = "";
    code = 3;
    "http_status" = 404;
    source = "file:///var/mobile/Containers/Data/Application/598EAE4A-F0E4-4A3B-A4A4-0DB657981122/tmp/cdv_photo_010.jpg";
    target = "http://example.com/api/boats/";
}

同樣重要的是要注意,我必須配置nginx設置以允許大於1M的文件大小,只有THEN才出現上述錯誤。 為什么是404? 目標是正確的。

我的清單中有以下內容允許所有連接...

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

編輯2:

我在index.html添加了CSP策略,這似乎是最不安全的方法,我認為這將使我能夠順利通過上傳!

<!-- This policy allows everything (eg CSS, AJAX, object, frame, media, etc) except that 
* CSS only from the same origin and inline styles,
* scripts only from the same origin and inline styles, and eval()
-->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; img-src '*' script-src 'self' 'unsafe-inline' 'unsafe-eval'">

更新2016-04-11: Google很快將要求使用Cordova / Phonegap的新應用和更新的應用程序至少為4.1.1 詳細信息: Android 4.1.1之前的版本將被阻止

您需要添加白名單,插件和CSP 將版本設置為編譯器。

解決許多常見的白名單問題

白名單的替代方法是此快速解決方案-但請注意,此快速修復可以消除white-list所有需求。 這會創建一個安全問題 ,您可能不希望通過。

快速修復將此添加到PHONEGAP BUILDconfig.xml
<preference name="phonegap-version" value="3.7.0" />

此方法將於2016年5月之后不可用。

長答案是這樣的:

Cordova / Phonegap的開發人員的最新失誤中您可以找到:

  • #6 沒有為編譯器設置“ phonegap版本”
  • #7 不為您的插件設置“版本”
  • #10 未在config.xml中添加新的“白名單”和“白名單插件”參數。

對於#6和#7

使用CLI版本時,如果您未為平台分配版本,或者如果未在config.xml中設置phonegap-version,則在“ Phonegap Build”中分配了最新版本。 如果幸運的話,您的程序將按預期運行。 如果您不走運,則會出現一系列級聯錯誤。

幸運的是,我們所有人Holly Schinsky都寫了一篇不錯的博客文章來解釋這一切:

Cordova / PhoneGap版本混亂
http://devgirl.org/2014/11/07/cordovaphonegap-version-confusion/

對於#10

這種相對*新*的要求意味着–要訪問任何網站或Web資源,您必須使用白名單和白名單插件。 如果您使用的是cordova-android@4.0.0或更高版本,則此要求生效。 包括cli-5.1.1和cli-5.2.0。 但是,如果您的版本低於4.0.0(例如3.5.0或3.7.0),那么您將不必添加白名單要求。

需要明確的是,“白名單”已經存在了一段時間,但是插件和要求是非常新的。 如您所料,添加“白名單”后,事實上的開放式訪問功能已被棄用。 或者說另一種方式,事實上的開放式訪問功能已被計划並計划取消。 此更改標志着取消了開放式訪問功能的一步。

此外,內容安全政策(CSP)吸引了眾多開發人員-因為它的宣傳不力。 根據您的使用和使用的Phonegap的版本,CSP需要進入您使用的每個HTML頁面,就像您必須等待“ deviceready”一樣。 但是,在某些情況下根本不需要它。 該文檔有些令人困惑,請仔細閱讀。 該文檔埋在許多最新文檔頁面的底部。

最后,雷蒙德·卡姆登(Raymond Camden)在他的博客中指出, 從科爾多瓦5開始,政策發生巨大變化

相關鏈接

Phonegap Build論壇: 在PGB上升級到cli-5.1.1的注意事項 ,現在需要白名單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM