2017-01-31 11 views
0

Я пытаюсь сделать снимок с помощью модуля Camera NativeScript, а затем загрузить его в Firebase, но он не работает. imageTaken и fileLocation - false и undefined. Что-то не так с моим кодом? (Написано в TypeScript)Загрузить изображение для Firebase от NativeScript

import fs = require('file-system') 
import frame = require('ui/frame') 
import utils = require('utils/utils') 
import observableModule = require('data/observable') 
import imageSource = require("image-source") 
import camera = require('camera') 
import image = require('ui/image') 
import { 
    ImageFormat 
} from 'ui/enums' 
import view = require("ui/core/view") 
import firebase = require('nativescript-plugin-firebase') 
var dialog = require('nativescript-dialog') 
var pd = new observableModule.Observable() 

var imageContainer 
var imageTaken = false 
var fileLocation 

exports.loaded = args => { 
    var page = args.object 
    imageContainer = view.getViewById(page, "img") 

    pd.set('imageTaken', imageTaken) 
    page.bindingContext = pd 
} 

exports.takePhoto = args => { 
    const options = { 
    width: 300, 
    height: 300, 
    keepAspectRatio: true 
    } 
    camera.takePicture().then((picture) => { 
    console.log('Take Picture') 
    var image = new image.Image() 
    image.imageSource = picture 
    imageContainer.imageSource = picture 
    let savePath = fs.knownFolders.documents().path; 
    let fileName = 'img_' + new Date().getTime() + '_' + this.currentUserId.getValue() + '.' + ImageFormat.jpeg 
    let filePath = fs.path.join(savePath, fileName) 
    console.log(filePath) 
    picture.saveToFile(filePath, ImageFormat.jpeg) 
    fileLocation = filePath 
    imageTaken = true 

    }) 
} 

exports.sendPhoto = args => { 
    console.log(imageTaken) 
    console.log(fileLocation) 
    imageTaken ? upload(Math.random() + '-' + Date.now()) : dialog.show({ 
    title: "Error", 
    message: "Please take a photo first.", 
    okButtonText: "OK" 
    }) 
} 

const upload = (remoteFileName) => { 
    firebase.uploadFile({ 
    remoteFullPath: 'uploads/images/' + remoteFileName, 
    localFile: fs.File.fromPath(fileLocation), 
    localFullPath: fileLocation, 
    onProgress: function (status) { 
     console.log("Uploaded fraction: " + status.fractionCompleted) 
     console.log("Percentage complete: " + status.percentageCompleted) 
    } 
    }).then(
    uploadedFile => { 
     console.log("File uploaded: " + JSON.stringify(uploadedFile)) 
    }, 
    error => { 
     console.log("File upload error: " + error) 
    } 
) 
} 

ответ

1

Старый модуль камеры устарел. Вместо этого используйте nativescript-camera. Обратите внимание, что для Android API23 + вам необходимо явно запросить время выполнения разрешений. С nativescript-камеры это делается с

import * as camera from "nativescript-camera"; 
camera.requestPermissions(); 

Подробнее о плагине nativescript-камеры here

+0

В конце концов, это было то, что решили. Благодаря! Просто спросить, знаете ли вы, почему у них все еще есть камера в документах, если она устарела? – hashtagmemes

+0

От Вчера статья камеры была обновлена ​​с помощью этого https://docs.nativescript.org/hardware/camera .. документация NativeScript обновляется в расчете, так что это может быть причиной того, что старая статья была активной недействительной Вчера (когда новый релиз был аннулирован) –