2016-05-23 20 views
0

我想用NativeScript Camera模塊拍照,然後用nativescript-background-http上傳它(因爲據我所知,這是上傳的唯一方法NS在這一刻)。我正在使用iOS模擬器,但在Android模擬器上也出現錯誤。NativeScript:相機takePicture和上傳with nativescript-background-http

相機插件工作正常,將圖片保存到文件。然而,我之後有一個問題需要從路徑上傳圖片。

這裏是我的代碼:

import cameraModule = require('camera') 
import imageModule = require('ui/image') 
import enumsModule = require('ui/enums') 
import fsModule  = require('file-system') 
import bgHttpModule = require('nativescript-background-http') 

const options = { width: 300, height: 300, keepAspectRatio: true } 
const format = enumsModule.ImageFormat.jpeg 

cameraModule.takePicture(options).then(imageSource => { 
    let contentType = `image/${format}` 
    let savePath = fsModule.knownFolders.documents().path 
    let fileName = 'img_' + new Date().getTime() + '.' + format 
    let filePath = fsModule.path.join(savePath, fileName) 

    if (imageSource.saveToFile(filePath, format)) { 
     var session = bgHttpModule.session('image-upload') 

     var options = { 
      url: 'http://192.168.99.100:8003', 
      method: 'POST', 
      headers: { 
       'Content-Type': 'application/octet-stream', 
       'File-Name': fileName 
      }, 
      description: '{ \'uploading\': ' + fileName + ' }' 
     } 

     let task = session.uploadFile(filePath, options) 

     task.on('progress', logEvent) 
     task.on('error', logEvent) 
     task.on('complete', logEvent) 

     function logEvent(e) { 
      console.log(e.eventName) 
     } 
    } 
}) 

我得到的錯誤是:

應用程序錯誤:錯誤/用戶/用戶/庫/開發商/ CoreSimulator /設備/ 11C75134-AC52-46B8-87F6 -58A61B8A1E0C/data/Containers/Data/Applicatio ... 538.jpeg不是有效文件:// url undefined

但是,如果我轉到該路徑,那個名稱的圖片就在那裏並且是有效的。難道我做錯了什麼?

+0

我用虛擬服務器http://httpbin.org/post測試了你的確切代碼,它返回的進度和一切似乎都很好...... –

回答

1

我能夠在前面加上「文件://」擺脫這種錯誤的任務線

var task = session.uploadFile("file://" + this.filePath, request); 

它的工作原理在模擬器,但我沒有測試它在實際設備上呢。

+0

這似乎是一個與插件:https:// github的問題。 COM/nativeScript/nativescript背景-HTTP /問題/ 15。而且,你是對的,那就是缺少的。 – terreb