当前位置: 首页 > 面试题库 >

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

宣星光
2023-03-14
问题内容

我将图片上传到服务器的代码是:

String userIdParameter = String.valueOf(userId);
    String fileName = "temporary_holder.jpg";
    HttpURLConnection conn = null;
    DataOutputStream dos = null;

    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;

    String sourceFileUri = HomeScreen.get_path();
    String upLoadServerUri = "http://10.120.10.87:8080/WebImage/UploadImage";

    File sourceFile = new File(sourceFileUri);
    if (!sourceFile.isFile()) {
        Log.e("Huzza", "Source File Does not exist");
        return;
    }
    int serverResponseCode = 0;
    try {

        // open a URL connection to the Servlet
        FileInputStream fileInputStream = new FileInputStream(sourceFile);

        // ------------------ CLIENT REQUEST
        URL url = new URL(upLoadServerUri);

        // Open a HTTP connection to the URL
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true); // Allow Inputs
        conn.setDoOutput(true); // Allow Outputs
        conn.setUseCaches(false); // Don't use a Cached Copy

        // Use a post method.
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");

        conn.setRequestProperty("ENCTYPE", "multipart/form-data");
        conn.setRequestProperty("Content-Type",
            "multipart/form-data;boundary=" + boundary);
        conn.setRequestProperty("file_name", fileName);
        conn.setRequestProperty("file_name_audio", fileName);
        conn.setRequestProperty("X-myapp-param1", userIdParameter);

        // conn.setFixedLengthStreamingMode(1024);
        // conn.setChunkedStreamingMode(1);

        dos = new DataOutputStream(conn.getOutputStream());

        dos.writeBytes(twoHyphens + boundary + lineEnd);

        dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
            + fileName + "\"" + lineEnd);

        dos.writeBytes(lineEnd);


            // create a buffer of maximum size
        bytesAvailable = fileInputStream.available();

        int streamSize = (int) sourceFile.length();
        bufferSize = streamSize / 10;

        System.out.println("streamSize" + streamSize);

        buffer = new byte[streamSize];

        // read file and write it into form...
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        int count = 0;
        while (bytesRead > 0) {
        progress = (int) (count);
        displayNotification();
        Thread.sleep(500);

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

        }

        // send multipart form data necesssary after file data...
        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

        // Responses from the server (code and message)
        serverResponseCode = conn.getResponseCode();
        String serverResponseMessage = conn.getResponseMessage();

        System.out.println("Upload file to serverHTTP Response is : "
            + serverResponseMessage + ": " + serverResponseCode);
        // close streams
        System.out.println("Upload file to server" + fileName
            + " File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
        Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
    } catch (Exception e) {
        e.printStackTrace();
    }
    // this block will give the response of upload link
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
        System.out.println("RESULT Message: " + line);
        }
        rd.close();
    } catch (IOException ioex) {
        Log.e("Huzza", "error: " + ioex.getMessage(), ioex);
    }
    return; // like 200 (Ok)

将图像上传到服务器工作正常。.我需要同时将mp3文件和图像上传到服务器。.请帮助


问题答案:

因此,您要在一个HTTP请求中发送多个文件?我从来没有亲自做过,但是根据RFC,只需在发送音频的消息中添加另一个正文,它应该看起来像这样:

    dos = new DataOutputStream(conn.getOutputStream());
    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name\";filename=\""
        + fileName + "\"" + lineEnd);
    dos.writeBytes(lineEnd);
    // Code for sending the image....
    dos.writeBytes(lineEnd);


    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"file_name_audio\";filename=\""
        + fileNameAudio + "\"" + lineEnd);
    dos.writeBytes(lineEnd);
    // Code for sending the MP3
    dos.writeBytes(lineEnd);
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

确保两个部分的名称不同(取决于服务器软件)。



 类似资料:
  • 我正试图用截击的方式发送图像 调用函数: 试道: 并传递配置文件字段中的值。 使用邮递员的成功方法:

  • 问题内容: 我创建了一个从有权访问的FTP服务器下载文件的功能。如何将文件上传回FTP服务器? 以下是我使用的download_files方法: 问题答案: 使用Apache Commons Net库中的FTPClient类。 这是一个带有示例的代码段: 摘录自http://www.kodejava.org/examples/356.html

  • 问题内容: 我想随请求一起发送图像作为参数。我使用下面的代码调用POST请求,但是我不知道如何将图像追加到正文中。 我通过图像选择器获取图像,如下所示: 我的要求如下 我是Swift的新手。我已经通过multipart / form-data看到了这一点,但无法自己实现。我不想将其编码为基本64格式。请帮助我。 问题答案: 我使用以下结构发送图像: 然后在函数中创建如下主体:

  • 我已经为KeystoneJS的AdminUI编写了一个自定义字段,它使用了TinyMCE的编辑器。 KeystoneJS在下面运行Apollo GraphQL服务器,并根据CMS模式自动生成变化和查询。TinyMCE具有输入自定义挂钩以上载图像的功能。 我希望能够连接这两个——使用GraphQL将图像从TinyMCE上传到KeystoneJS的服务器。 例如,在我的设置中,我在CMS中有一个字段。

  • 经过一些研究,我发现了一个用于多部分文件上传的开放库。在我的情况下,我想上传一个图像使用PUT请求,其中的图像要么是从画廊或相机选择。以下是我正在使用的资源:1。https://github.com/gotev/android-upload-service2.https://www.simplifiedcoding.net/android-upload-image-to-server/#comme

  • 问题内容: 我想将一些文件上传到HTTP服务器。基本上,我需要的是对服务器的某种POST请求,其中包含一些参数和文件。我看到了仅上传文件的示例,但没有找到如何也传递其他参数的示例。 什么是最简单,免费的解决方案?有人有我可以学习的文件上传示例吗?我已经搜寻了几个小时,但是(也许只是那几天)找不到我真正需要的东西。最好的解决方案是不涉及任何第三方类或库的东西。 问题答案: 通常,你会用来触发HTTP