How can I load a file with other string data using HttpURLConnection in android?

I want to upload a file with other string data to the server in one request using HttpURLConnection ( not using MultiPartEntityBuilder ) ... Currently I can send a file, but not other string data with it !! Here is my current code for sending a file to the server:

    HttpURLConnection.setFollowRedirects(false);
    HttpURLConnection connection = null;
    String fileName = sourceFile.getName();

    try {
        connection = (HttpURLConnection) new URL(FILE_UPLOAD_URL).openConnection();
        connection.setRequestMethod("POST");
        String boundary = "---------------------------boundary";
        String tail = "\r\n--" + boundary + "--\r\n";
        connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
        connection.setRequestProperty("token", sharedpreferences.getString("token", ""));
        connection.setRequestProperty("app_version", app_version);
        connection.setRequestProperty("api_version", api_version);
        connection.setDoOutput(true);

        String metadataPart = "--"
                + boundary
                + "\r\n"
                + "Content-Disposition: form-data; name=\"metadata\"\r\n\r\n"
                + ""
                + "\r\n";

        String fileHeader1 = "--"
                + boundary
                + "\r\n"
                + "Content-Disposition: form-data; name=\"myFile\"; filename=\""
                + fileName
                + "\"\r\n"
                + "Content-Type: application/octet-stream\r\n"
                + "Content-Transfer-Encoding: binary\r\n";

        long fileLength = sourceFile.length() + tail.length();
        String fileHeader2 = "Content-length: " + fileLength + "\r\n";
        String fileHeader = fileHeader1 + fileHeader2 + "\r\n";
        String stringData = metadataPart + fileHeader;

        long requestLength = stringData.length() + fileLength;
        connection.setRequestProperty("Content-length", "" + requestLength);
        connection.setFixedLengthStreamingMode((int) requestLength);
        connection.connect();

        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        out.writeBytes(stringData);
        out.flush();

        int progress = 0;
        int bytesRead;
        byte buf[] = new byte[1024];
        BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream(sourceFile));
        while ((bytesRead = bufInput.read(buf)) != -1) {
            // write output
            out.write(buf, 0, bytesRead);
            out.flush();
            progress += bytesRead; // Here progress is total uploaded bytes

            publishProgress((int) ((progress * 100) / sourceFile.length())); // sending progress percent to publishProgress
        }

        // Write closing boundary and close stream
        out.writeBytes(tail);
        out.flush();
        out.close();

        // Get server response
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String line;
        StringBuilder builder = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }

    } catch (Exception e) {
        // Exception
    } finally {
        if (connection != null) connection.disconnect();
    }
    return null;

      

Any help would be appreciated! Thank...

+3


source to share





All Articles