Nativescript和资源文件夹 - 有一个简单的解决方案吗?

时间:2017-11-28 13:20:15

标签: android angular nativescript

  

我将从目前的事实开始 - 我正在成功上传   一个mp3文件到服务器 - 通过hacky方式。

我有2 raw个文件夹,你可以看到:

enter image description here

以下是上传文件的工作代码:

 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)

问题出在哪里?

正在从根raw文件夹上载当前文件。 (proof

但正确的方式(as I was told)是通过raw文件夹或assets文件夹上传,然后通过res://raw/a1.mp3(或res://raw/a1引用它})。

所以我已切换到:let file="res://raw/a1.mp3";

但得到了error

  

错误错误:java.io.FileNotFoundException:找不到文件   路径:res://raw/a1.mp3

同样适用于:let file="res://raw/a1"; //without extension - 收到错误:

  

JS:错误错误:java.io.FileNotFoundException:找不到文件   path:res:// raw / a1

问题:
如何访问raw文件夹下的mp3文件? (不是外部文件夹而是资源文件夹)

1 个答案:

答案 0 :(得分: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可以做这样的事情,但我不熟悉这就是我所能提供的。