2017-11-28 12 views
0

I will start with the fact that currently - I'm uploading successfully an mp3 file to a server - but via a hacky way.Nativescriptとresourcesフォルダ - 簡単な解決策はありますか?

私はあなたが見ることができるように2つのrawフォルダを持っている:

upload1() 
    { 

     let file = fs.path.join(fs.knownFolders.currentApp().path, "raw/a1.mp3"); 

     var request = { 
      url:   "http://posttestserver.com/post.php", 
      method:  "POST", 
      ... 
     }; 

     var task = session.uploadFile(file, request); 
     task.on("progress", this.logEvent); 

    } 

Here is the output for the successful upload (showing progress)

enter image description here

そしてここでは、ファイルをアップロードする作業コードですだから問題はどこにあるの?

現在のファイルは、ルートrawフォルダからアップロードされています。 (proof

しかし、正しい方法(as I was told)はrawフォルダまたはassetsフォルダを経由して、それをアップロードしてres://raw/a1.mp3(またはres://raw/a1)を経由して、それを参照することです。

だから私はに切り替えた:let file="res://raw/a1.mp3";

しかしerrorを得た:

ERROR Error: java.io.FileNotFoundException: Could not find file at path: res://raw/a1.mp3

またのために:let file="res://raw/a1"; //without extension - エラー・ガット:

JS: ERROR Error: java.io.FileNotFoundException: Could not find file at path: res://raw/a1

質問:
をの下のmp3ファイルにはどうすればアクセスできますか?フォルダ? (いない外部のフォルダが、リソース1)

+0

なぜあなたはapk内のファイルパッケージをアップロードする必要がありますか?あなたはすでにファイルへのアクセス権を持っていますので、それを直接ファイルサーバーに置くのはいかがですか? –

+0

@WadeWilson私はまだ材料を学んでいます。最後に、生のフォルダにあるファイルをアップロードしたいと思います。今のところ、mp3を生成して 'RAW'フォルダに保存するAPPとして扱い、それをサーバにアップロードする必要があります。 –

+0

私は、少なくとも正しい方向に向けるのに役立つ答えを追加しました。あなたはAndroidのビルドシステムがリソースをどのように機能するかを与えられたので、作るどのそれらに書き込むことができませんので、生のフォルダとresディレクトリの下にあるすべてのフォルダは読み取り専用です。生成されたmp3をデバイスストレージに直接保存する必要があります。 –

答えて

2

私はNativeScriptに不慣れだが、ここに関係なく、Javaを使用したタイプの生のフォルダのファイルにアクセスする方法の例です:

public static final FileDescriptor getFDForResource(Context context, int resId) { 
    AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId); 
    if (afd != null) { 
     return afd.getFileDescriptor(); 
    } 
    return null; 
} 

public void readFile(int resId) { 
    FileDescriptor fd = getFDForResource(resId); 
    InputStream inputStream 
    if(fd != null) { 
     inputStream = new FileInputStream(fd); 
     byte nextByte; 
     while((nextByte = inputStream.read()) != -1) { 
      // Upload the file bytes to your server. 
     } 
    } 
} 

あなたが場所をしたいですよこのコードはUtilクラスにあり、NativeScriptを使用してアクセスします。私はそのようなことをするためのいくつかのAPIがあると確信していますが、私は私が提供することができます私は不慣れです。

+0

生のリソースの残油を得るために、あなたが最初にgetIdentifier' 'への呼び出しを行いたいということに注意してください - https://developer.android.com/reference/android/content/res/Resources.html# getIdentifier(java.lang.Stringで、java.lang.Stringで、java.lang.Stringで)com.myapp.Name 'のような文字列を渡すこと:生/ a1.mp3'、オプションパラメータのヌルが続きます。 – pkanev

関連する問題