java - 如何将音频文件发送到android中的服务器?

标签 java android android-ndk

public static String fileUploadFromPath(String url, String path) throws Throwable {

        System.out.println("IN fileUploadFromPath ");
        String responseData = "";
        String NL = System.getProperty("line.separator");

        try {

            System.out.println("url ************ " + url);
            File file = new File(path);
            System.out.println("file ************ " + file.getAbsolutePath()
                    + " : " + file.exists());
            StringBuilder text = new StringBuilder();

            if (file.exists()) {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;

                while ((line = br.readLine()) != null) {
                    text.append(line);
                    text.append(NL);
                }
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost postRequest = new HttpPost(url);
                // System.out.println("postRequest ************ " +
                // postRequest);
                MultipartEntity multipartContent = new MultipartEntity();
                ByteArrayBody key = new ByteArrayBody(text.toString()
                        .getBytes(), AgricultureUtils.getInstance()
                        .getTimeStamp() + ".3gp");
                multipartContent.addPart(AgricultureUtils.getInstance()
                        .getTimeStamp() + ".3gp", key);
                postRequest.setEntity(multipartContent);
                HttpResponse response = httpClient.execute(postRequest);
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        response.getEntity().getContent()));
                StringBuffer sb = new StringBuffer("");
                String content = "";
                while ((content = in.readLine()) != null) {
                    sb.append(content + NL);
                }
                in.close();

                /*
                 * File myDir = new File(Constants.dirctory); if
                 * (!myDir.exists()) { myDir.mkdirs(); } File myFile = new
                 * File(myDir, fileName); FileOutputStream mFileOutStream = new
                 * FileOutputStream(myFile);
                 * mFileOutStream.write(sb.toString().getBytes());
                 * mFileOutStream.flush(); mFileOutStream.close();
                 */

                System.out.println("response " + sb);
            }

        } catch (Throwable e) {
            System.out.println("Exception In Webservice ----- " + e);
            throw e;
        }
        return responseData;
    }

我想上传一个音频文件到服务器。

我可以通过上面的代码将音频文件上传到服务器,但是文件不工作(不在系统中播放)。如果您有任何想法,请帮助我。

最佳答案

您不应在此处使用 FileReaderStringBuilder,因为它将数据视为字符(根据默认系统字符集进行编码) .真的,您根本不应该使用 Reader。二进制数据应通过 InputStream 处理,例如

final ByteArrayOutputStream out = new ByteArrayOutputStream();
try (final InputStream in = new FileInputStream(file)) {
  final byte[] buf = new byte[2048];
  int n;
  while ((n = in.read(buf)) >= 0) {
    out.write(buf, 0, n);
  }
}
final byte[] data = out.toByteArray();

关于java - 如何将音频文件发送到android中的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12147020/

相关文章:

java - 如何扫描 wifi 网络并将它们列在 ListView 中?

java - Collections.sort(list) 和 Collections.sort(list,comparator) 之间的区别

android - Android 是否提供用于确定可识别区域设置的周末的 API?

android - 如何Textview换行?

android - 我可以将手机用作带有 Windows 10 登录选项的 webauthn 安全 key 吗

android - NDK 使用不同的 mk 文件构建以进行发布/调试

android - 间歇性 Android NDK UnsatisfiedLinkError

java - 如何限制cookie中的某些子域?

Android.mk 将编译 .c 源而不是 .cpp

java - 通话结束后重新开始 Activity 的正确方法