Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
263 views
in Technique[技术] by (71.8m points)

java - How to upload .mp3 file and image to http server?

My code for uploading image to server is :

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

    String lineEnd = "
";
    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)

    

Uploading image to server works fine. I need to upload both mp3 file and image to the server.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

So, you want to send multiple files in one HTTP request? I've never done this myself, but according to the RFC, just add another body to the message in which you send the audio, it should look something like this:

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

Make sure that the names of both parts are different (depending on the server software).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...