android文件系统格式转换,关于android:如何使用React Native从文件系统中检索文件,以转换为base64和以JSON形式发布的http?...

我正在使用本文中的react native模板。该代码在Github上都可用。

您可以使用该应用程序录制音频并保存到文件系统。我想出了如何获取文件URI的方法,但是我发现无法获取文件本身的实际内容。我要做的就是检索二进制或ascii或十六进制字符串等形式的实际文件内容(这是一个.m4a文件),因此我可以将其转换为base64编码,然后将其作为JSON发布到我的服务器。这是我的代码:

/src/screens/RecordAudioScreen/RecordAudioScreenContainer.js

onEndRecording: props => async () => {

try {

// here is the URI

console.log("HERE IS THE URI!!");

const audio_data ="URI:" + props.recording._uri;

// Help needed here

// retrieve file contents from the Android/iOS file system

// Encode as base64

audio_data = ... // ???????

// this works already, posts to the server

fetch("https://myserver.com/accept_file",

{

headers: {

'Accept': 'application/json',

'Content-Type': 'application/json'

},

method:"POST",

body: JSON.stringify({user_id: 1, audio_data: audio_data})

})

.then(function(res){ console.log(res) })

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

console.log("FINISHED POST REQUEST!!!")

await props.recording.stopAndUnloadAsync();

await props.setAudioMode({ allowsRecordingIOS: false });

} catch (error) {

console.log(error); // eslint-disable-line

}

if (props.recording) {

const fileUrl = props.recording.getURI();

props.recording.setOnRecordingStatusUpdate(null);

props.setState({ recording: null, fileUrl });

}

},

我已经尝试了很多东西,但都没有成功。理想情况下,我只是从File系统中获取文件内容,将其转换为base64并将其通过javascript中的所有方法发布出去,但这对于在基于应用程序的框架中应该是相当标准的事情似乎非常困难。

这是关于React Native Fetch Blob的一些堆栈溢出问题,我无法正常工作Fetch Blob 1 Fetch Blob 2

我已经尝试过使用React Native Fs,但是我无法使其正常加载,在尝试退出该应用程序后,我陷入了我不了解的东西的深深困扰。如果可能的话,我更喜欢一个简单的React Native解决方案。

我还尝试了一些使用FormData的代码,但也无法正常工作。

也许答案有点像关于从Firebase检索图像的问题?我不知道,这是我在React中做任何事情的第一次尝试。

它也可能与生成的URI中的" file://"前缀有关,因为在讨论删除该前缀时有很多问题(仅针对Android,或者对于iOS,我不太清楚)。

转换为base64将通过以下方式完成,但是我首先需要实际的文件内容:

非常感谢您的帮助。

前段时间,我写了一个简单的录音语音应用程序示例。

要获取文件,我使用了这种方法:

import RNFS from 'react-native-fs';

(...)

getFiles() {

RNFS.readDir(AudioUtils.DocumentDirectoryPath)

.then((result) => {

this.setState({recordedFiles: result});

return Promise.all([RNFS.stat(result[0].path), result[0].path]);

})

.catch((err) => {

console.log(err.message, err.code);

});

}

工作正常。

这是完整的示例https://github.com/soutot/react-native-voice-record-app

让我知道是否有帮助。 否则我们可以尝试其他方法

在接下来的几天里,我会仔细研究一下,并告诉您。 谢谢。

我尝试下载存储库,但由于必须安装Android环境,因此在运行react-native run-android时遇到问题。 stackoverflow.com/questions/32634352/在接下来的三周中,我非常忙,但是一旦Ive完成了我当前的项目,Ill就会恢复工作。 更新待定!

没问题。 请让我知道它是否解决了您的问题,或者您对此有任何疑问

我今天下午在应用程序上做了一些工作,一旦设置了Android Dev环境,我就可以在短短几个小时内使它完全按照我的要求工作! 非常感谢您的帮助和出色的开源资源库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值