Android:如何上传.mp3文件到http服务器?

2024-02-07

我想将 .mp3 文件(仅)从设备上传到我的服务器。

我想浏览媒体数据的路径并选择任何 mp3 文件并上传它。

我怎样才能做到这一点?


我最终的 JAVA 和 PHP 代码用于将文件从 Android 的 SD 卡上传到我自己的 Web 服务器。

Java/Android 代码:

private void doFileUpload() {

    HttpURLConnection conn = null;
    DataOutputStream dos = null;
    DataInputStream inStream = null;
    String existingFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/mypic.png";
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;
    String responseFromServer = "";
    String urlString = "http://mywebsite.com/directory/upload.php";

    try {

        //------------------ CLIENT REQUEST
        FileInputStream fileInputStream = new FileInputStream(new File(existingFileName));
        // open a URL connection to the Servlet
        URL url = new URL(urlString);
        // Open a HTTP connection to the URL
        conn = (HttpURLConnection) url.openConnection();
        // Allow Inputs
        conn.setDoInput(true);
        // Allow Outputs
        conn.setDoOutput(true);
        // Don't use a cached copy.
        conn.setUseCaches(false);
        // Use a post method.
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
        dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + existingFileName + "\"" + lineEnd);
        dos.writeBytes(lineEnd);
        // create a buffer of maximum size
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];
        // read file and write it into form...
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        while (bytesRead > 0) {

            dos.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        }

        // send multipart form data necesssary after file data...
        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        // close streams
        Log.e("Debug", "File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();

    } catch (MalformedURLException ex) {
        Log.e("Debug", "error: " + ex.getMessage(), ex);
    } catch (IOException ioe) {
        Log.e("Debug", "error: " + ioe.getMessage(), ioe);
    }

    //------------------ read the SERVER RESPONSE
    try {

        inStream = new DataInputStream(conn.getInputStream());
        String str;

        while ((str = inStream.readLine()) != null) {

            Log.e("Debug", "Server Response " + str);

        }

        inStream.close();

    } catch (IOException ioex) {
        Log.e("Debug", "error: " + ioex.getMessage(), ioex);
    }
}

要在您的服务器上运行的相关 PHP 代码 (upload.php):

<?php
// Where the file is going to be placed 
$target_path = "uploads/";

/* Add the original filename to our target path.  
Result is "uploads/filename.extension" */
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
    chmod ("uploads/".basename( $_FILES['uploadedfile']['name']), 0644);
} else{
    echo "There was an error uploading the file, please try again!";
    echo "filename: " .  basename( $_FILES['uploadedfile']['name']);
    echo "target_path: " .$target_path;
}
?>

需要注意的事项。
1)我的SD卡根目录中有“mypic.png”。例如,如果您通过 Mass Storage USB 视图查看 Android 设备,您会将文件放入您遇到的第一个目录中。

2) 手机上的 USB 大容量存储必须关闭!或者只是将其从正在编写代码的计算机上完全拔掉,以确保情况确实如此。

3)我必须在与我的php文件相同的目录中创建一个“uploads”文件夹。

4)显然你必须更改我写的网址http://mywebsite.com/directory/upload.php http://mywebsite.com/directory/upload.php成为您自己的网站。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:如何上传.mp3文件到http服务器? 的相关文章

  • Nexus One / Android“CPU 可能被固定”错误

    我正在使用 NDK 修订版 4 和 OpenGL ES 2 0 为 Nexus One 编写一款图形密集型游戏 我们真的在这里推动硬件 并且在大多数情况下它运行良好 除了偶尔我会因以下日志消息而严重崩溃 W SharedBufferStac
  • 带图标的 Android 选项菜单

    如何使用选项菜单显示图标 我尝试了以下代码 但我的选项菜单没有图像图标 我正在使用 android 版本 4 0 来开发应用程序 Java代码 public boolean onCreateOptionsMenu Menu menu sup
  • 如何在导航抽屉上显示谷歌加个人资料图片?

    下面的代码来自github 用于在android应用程序中通过gmail登录 我做了一些修改以使用volley显示个人资料图片 它工作正常 我只想在导航抽屉中显示这些内容 个人资料图片 姓名和电子邮件 ID 我使用了 android stu
  • 更改 Android 应用程序的所有字体[重复]

    这个问题在这里已经有答案了 如何更改 Android 应用程序的整个字体 以前我看到这个帖子 https gist github com artem zinnatullin 7749076在 github 上 该解决方案仅适用于低于 api
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • ANDROID:如何从所有窗口顶部的通知或长按搜索按钮启动弹出对话框?

    我已经搜索过 一切都是关于启动活动而不是对话框 我想要做的是在状态栏中显示通知 当用户按下它时 在用户单击通知之前正在查看的内容之上会弹出一个对话框 我不希望对话框显示在主要活动或最近的应用程序列表的顶部 另外 如何通过长按搜索按钮启动对话
  • 在 Android Studio 中调试服务的正确方法?

    在 Android Studio 中调试服务有正确的方法吗 或者 Android Studio 无法做到这一点 当我尝试调试时 它只会断开套接字 与目标虚拟机断开连接 地址 localhost 8600 传输 socket 希望你能在这里帮
  • GoogleMap 本质上是可打包的吗?

    我对java和android很陌生 我遇到了一个基本问题 在这个给定的fragment 我可以添加GoogleMap对象为parcelable没有任何额外的pracelable类为 public class SecondFragment e
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 从 java 活动 *.java 启动 kotlin 活动 *.kt?

    使缓存无效 重新启动 帮助我 我在java类中的代码是 Intent intent new Intent view getActivity AddPaymentActivity class view getActivity startAct
  • Android:调用超类的原因?

    我正在查看 Android 开发人员网站上的记事本教程 我有一个关于调用活动超类的重写函数的问题 例如 public class Notepadv3 extends ListActivity Override public boolean
  • Keytool 不要求别名密码

    我正在尝试生成一个密钥库文件来签署我的 React Native Android 应用程序并将其发布到 Play 商店 我正在尝试按照本文档中的描述进行操作 https facebook github io react native doc
  • RecyclerView onClick notificationItemRemoved 不会触发 onBindView

    I use notifyItemRemoved 方法我想更改其他剩余项目 但该方法没有触发onBindView 方法 除了使用notifyDataSetChanged 我想要附带的动画notifyItemRemoved method 如果您
  • Android 上的 Facebook 社交插件

    我想集成 Facebook 的评论社交插件 https developers facebook com docs reference plugins comments https developers facebook com docs r
  • ListPreferences 的异常

    这是我的第一个 Android 应用程序 在尝试使用 ListPreference 时遇到了异常 应用程序与首选项一起加载 但是当我触摸 ListPreference 条目时 应用程序 意外停止 设置 java public class S
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • Android Google 地图:在 2 个位置设置边界并以其中一个位置为中心

    我知道如何在两个位置设置边界 以便两个位置都以最大缩放显示 使用LatLngBounds 我知道如何以某个位置为中心 请问我该如何同时做这两件事 在 2 个位置设置边界AND将地图置于 2 个位置之一的中心 googleMap setCen
  • 如何从 Google Fit API 获取步数?

    请原谅我的笨蛋 我对 Android 和 Google API 完全陌生 我有以下连接到 GoogleFit 的代码 我还有一个 API 密钥和 Oauth 我在哪里 如何使用 API 密钥和 Oauth 关于如何获取它们的指南有很多 但关
  • 更改 ActionMode 溢出图标

    有没有办法更改 ActionMode Overflow 图标而不更改 正常 ActionBar 的图标 我仍然需要弄清楚如何仅更改 ActionMode Actionbar 内部的溢出图标 因为我更改了默认操作栏中的溢出图标 该图标在 Ac

随机推荐