【发布时间】:2014-04-17 14:33:00
【问题描述】:
我正在尝试将 mp3 文件从我的 android 手机上传到 php 服务器。我使用以下代码将其编码为字符串,然后使用 httpPost 上传(为此我没有在本文中包含代码以保持重点)。
File audioStorageDir = new File(Environment.getExternalStorageDirectory().getPath(), "LEADVoices");
InputStream is;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
System.out.println("The name of the audio file " + audioName);
is = new FileInputStream(audioStorageDir.getAbsolutePath() + File.separator + audioName);
int bytesAvailable = is.available();
int maxBufferSize = 1000;
byte[] buffer = new byte[bytesAvailable];
int bytesRead = is.read(buffer, 0, bytesAvailable);
while (bytesRead > 0) {
baos.write(buffer, 0, bytesAvailable);
bytesAvailable = is.available();
bytesAvailable = Math.min(bytesAvailable, maxBufferSize);
bytesRead = is.read(buffer, 0, bytesAvailable);
}
System.out.println("Uploaded an audio file");
byte[] bytes = baos.toByteArray();
String encodedAudio = Base64.encodeToString(bytes, Base64.DEFAULT);
choiceList.add(new BasicNameValuePair("audio",encodedAudio));
is.close();
baos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("bytearrayoutputstream error1");
} catch (IOException e) {
e.printStackTrace();
System.out.println("bytearrayoutputstream error2");
}
在服务器端,我使用以下代码来解码字符串。但是服务器端生成的mp3文件无法播放。有人知道出了什么问题吗?
$audio = 'myfile.mp3';
$encodedString = $_POST['audio'];
$dir = '../myfolder/Audios';
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$decoded=base64_decode($encodedString);
$filepath = $dir.'/'.$audio;
file_put_contents($filepath,$decoded);
}
【问题讨论】:
-
“好像是空的”?你有没有麻烦实际检查?例如
var_dump($_POST)看看发生了什么,echo strlen($decoded)等等...?另外,在您的 android 代码中,您实际上并没有为您的 POST 数据设置名称,因此您的 _POST 数组中可能没有voice_recording项。 -
@Marc B 看到我的编辑,你在我完成输入我的帖子并自己阅读之前发布了这条评论。
-
评论仍然保留,请发送
var_dump($_POST)以查看您实际收到的内容。 -
使用 var_dump($_POST),我收到此错误消息。这是什么意思?
array (size=0) 空
-
这意味着你的 $_POST 数组是空的并且你的手机没有正确地向服务器发送任何东西。
标签: php android file-upload mp3