2016-12-19 5 views
0

ユーザーのギャラリーから画像を選択しようとしています。画像をImageViewで表示し、アップロードして保存します。NativeScript imagepickerで選択したファイルを保存する方法

私はnativescript-imagepickerプラグインを使用しています。ここで

は私がギャラリーから画像を選択し、ImageViewでそれを設定する方法である:

export function selectPicture() :void{ 
    let context = imagePicker.create({ 
     mode : "single" 
    }); 
    context.authorize() 
     .then(()=>{ return context.present();}) 
     .then((selection)=>{ 
      selection.forEach((selected)=>{ 
       selected.getImage().then((value :ImageSource)=>{ 
        imageView.imageSource = value; 
       }) 
      }) 
     }); 
} 

アンこれは、私はそれを保存し、それをアップロードする方法です:

export function upload():void{ 

    try { 
     let photoPath = FileNameService.generatePictureFilePath(); 
     let fileName = FileNameService.getFilenameFromPath(photoPath); 
     //this is where I get the error 
     **fromAsset(imageView.src)**.then(
      (res) => { 
      imageSource = res;   
      let saved = imageSource.saveToFile(...); 
      if(saved){//doStuff }, 
     (error)=>{ 
      alert("Error " + error); 
     }) 
    }catch (e){ 
     alert(e); 
    } 
} 

fromAsset機能が投げています次のエラー:

asset.getImageAsync is not a function

私は間違って何をしていますか?

答えて

1

ギャラリーから選択したアイテムを取得したら、ImageSource saveToFile(<path>, <file_format>);メソッドを使用してイメージを保存できます。その後、必要なバックエンドサービスに画像をアップロードするためにファイルパスを使用することができます。下記の例を見てください。

function startSelection(context) { 
    context 
     .authorize() 
     .then(function() { 
      imageItems.length = 0; 
      return context.present(); 
     }) 
     .then(function(selection) { 
      selection.forEach(function(selected_item) { 
       selected_item.getImage().then(function(imagesource){ 
        let folder = fs.knownFolders.documents(); 
        let path = fs.path.join(folder.path, "Test"+counter+".png"); 
        let saved = imagesource.saveToFile(path, "png"); 

        if(saved){ 
         var task = sendImages("Image"+counter+".png", path); 
         var item = new observable.Observable(); 
         item.set("thumb", imagesource); 
         item.set("uri", "Test"+counter+".png"); 
         item.set("uploadTask", task); 

         imageItems.push(item); 
        } 
        counter++; 
       }) 

      }); 
     }).catch(function (e) { 
      console.log(e); 
     }); 
} 

また、サンプルプロジェクトhereを確認することもできます。

+1

Nikolayの答えは正しい以上ですが、 "imagesource.saveToFile(path、enums.ImageFormat.png);"のようなenumsモジュールを使ってファイル形式を追加します。ちょうどあなたがIOSまたはAndroidの互換性に関する驚きを持っていないことを確認するために – Kansen

+0

ありがとう! jpgはiosでサポートされていませんか? –

関連する問題