java - 如何上传.mp3文件和图片到http服务器?

标签 java android file-upload multipartform-data

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

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);

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

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

相关文章:

java - 如何从 Android 应用程序中的另一个类调用非静态方法

android - Retrofit2 不发送请求(不使用 OkHttp 进行日志记录)

java - 如何使用selenium Webdriver(Mac)中的Robot类上传多个文件?

node.js - 重新组装分段上传中生成的文件 block

java - 如何在 Spring Boot 中手动配置 JdbcTemplate?

java - 从 Arraylist<String> 获取重复值,然后在另一个 Arraylist 中获取这些项目

Android OpenCV 绘制霍夫线

java - 基本的 Firebase/Java 读/写

javascript - 通过blueimp jquery-fileupload异步上传多个文件

java - ObjectOutputStream 无法正确保存父类(super class)的字段,除非它们是可序列化的,为什么没有错误或警告?