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

标签 android file-upload

我想将 .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 View 查看 Android 设备,您会将文件放在您遇到的第一个目录中。

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

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

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

关于Android:如何将 .mp3 文件上传到 http 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966910/

相关文章:

python - Google Drive API 写入一个新的驱动器文件,该文件不是 Drive 'viewer' 类型

file-upload - Amazon S3 crossdomain.xml 始终显示 403 Forbidden

javascript - JQuery 文件上传未重置

android - 错误 : Fail to resolve : com. android.support :appcompat-v7:23. 2.1

android - 方法 getController() 未为类型 MapView 定义

android - 我想制作具有 3D 效果的幻灯片菜单,如下图所示

android - 在 ImageView 中检测触摸

file-upload - EXTJS MVC 中的文件上传字段

android - 带有不透明按钮的半透明 fragment

python - django上传文件的问题