2017-03-29 12 views
0

イメージを「ロード」できるようにする必要があるXamarinフォームプロジェクトがあります。私はすでにボタンを押すと、このようFilePickerを使用してファイルを検索することができます。私は今、必要があるだろうと、アクセスするために、プロジェクトのリソースフォルダにその「FILEDATA」(画像)をコピーすることですイメージをリソースにコピーするXamarin

async void OnUpload(object sender, EventArgs e) 
     { 
      try 
      { 
       FileData filedata = await CrossFilePicker.Current.PickFile(); 
       // the dataarray of the file will be found in filedata.DataArray 
       // file name will be found in filedata.FileName; 
       //etc etc. 
      } 
      catch (Exception ex) 
      { 
      } 
     } 

ファイルに簡単に追加できます。私は試しました:

await CrossFilePicker.Current.SaveFile(filedata.FileName); 

ただし、プロジェクトフォルダにファイルは保存されません。 さらに、私はUWPとAndroidで動作するために必要です。

答えて

3

SaveFileメソッドは、特定のフォルダに保存します。

あなたが選択した場所に保存する場合は、DependencyServiceで実装する必要があります。 IO操作はOS固有のものであり、ファイルパスも同様です。あなたの上に構築するための簡単な例をお伝えします。

ので、同じように、あなたの共有コードのインターフェイスを定義してスタート:ファイル名のようなものを指定したい場合はもちろん、

public interface IFileManager 
{ 
    void SaveFile(Stream stream); 
} 

、それは他の方法も同様に、または追加のパラメータを持つことができ、それがありますあなた次第。何が起こったのかを知るためには、何らかの戻り値が好きかもしれません。

プラットフォームごとにこのインターフェイスを実装しました。これは、ストリームを取り、あなたが選んだのパスに保存されます

[assembly: Xamarin.Forms.Dependency (typeof (FileManager_Android))] 

public class FileManager_Android : IFileManager 
{ 
    public void SaveFile(Stream stream) 
    { 
     var dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim); 

        string filename = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg"; 
     string filePath = System.IO.Path.Combine(dir, name); 

     try 
        { 
         System.IO.File.WriteAllBytes(filePath, imageData); 
     } 
     catch (Exception ex) 
     { 
      System.Console.WriteLine(e.ToString()); 
     } 
    } 
} 

this linkに触発されたコードを保存する)

:Android用たとえば、それはこのようになります。

UWPの場合は、同様に実装する必要があります。これは、実装がSaveFile以外の場合と非常に似ています。私の知る限り、これはあなたのためにこれを簡単にするプラグインはまだありません。 PCLStorageがありますが、このプラグインはテキストファイルでしか動作しないようです。あなたはまだインスピレーションのためにそれを見ることができます。

+0

恐れ入りますが、唯一の問題は私が のような外部のフォルダに保存したくないということです。Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim); Drawableフォルダ – JOSEMAFUEN

+0

あなたのアプリケーションがデバイス上にあると、そのフォルダに書き込むことはできません。これについては、この[SO post](http://stackoverflow.com/questions/3374061/write-to-res-drawable-on-the-fly)を参照してください。それがあなたを助けてくれたら、答えとしてそれを受け入れてください。 –

関連する問題