Created
November 27, 2012 07:59
-
-
Save anonymous/4153047 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.IOException; | |
import java.io.PrintWriter; | |
import java.io.OutputStream; | |
import java.io.OutputStreamWriter; | |
import java.io.InputStream; | |
import java.io.FileInputStream; | |
import java.io.File; | |
import java.net.URLConnection; | |
import java.net.HttpURLConnection; | |
import java.net.MalformedURLException; | |
import java.net.URL; | |
class MultipartPost { | |
public static void main(String[] args) throws IOException, MalformedURLException { | |
String charset = "UTF-8"; | |
URL url = new URL("http://localhost:3000"); | |
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); | |
connection.setDoOutput(true); | |
String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value. | |
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); | |
PrintWriter writer = null; | |
String param = "value"; | |
File binaryFile = new File("[some file here]"); | |
String CRLF = "\r\n"; // Line separator required by multipart/form-data. | |
try { | |
OutputStream output = connection.getOutputStream(); | |
writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important! | |
// Send normal param. | |
writer.append("--" + boundary).append(CRLF); | |
writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF); | |
writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); | |
writer.append(CRLF); | |
writer.append(param).append(CRLF).flush(); | |
// Send binary file. | |
writer.append("--" + boundary).append(CRLF); | |
writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + binaryFile.getName() + "\"").append(CRLF); | |
writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName())).append(CRLF); | |
writer.append(CRLF).flush(); | |
InputStream input = null; | |
try { | |
input = new FileInputStream(binaryFile); | |
byte[] buffer = new byte[1024]; | |
for (int length = 0; (length = input.read(buffer)) > 0;) { | |
output.write(buffer, 0, length); | |
} | |
output.flush(); // Important! Output cannot be closed. Close of writer will close output as well. | |
} finally { | |
if (input != null) try { | |
input.close(); | |
} catch (IOException logOrIgnore) { | |
System.out.println(logOrIgnore); | |
} | |
} | |
writer.append(CRLF).flush(); // CRLF is important! It indicates end of binary boundary. | |
// End of multipart/form-data. | |
writer.append("--" + boundary + "--").append(CRLF); | |
} finally { | |
if (writer != null) writer.close(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment