mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-11 21:26:20 +00:00
98 lines
3.0 KiB
Java
98 lines
3.0 KiB
Java
package org.servalproject.servaldna;
|
|
|
|
import org.servalproject.servaldna.rhizome.RhizomeIncompleteManifest;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.io.PrintStream;
|
|
import java.net.HttpURLConnection;
|
|
|
|
/**
|
|
* Created by jeremy on 5/10/16.
|
|
*/
|
|
public class PostHelper {
|
|
private HttpURLConnection conn;
|
|
private String boundary;
|
|
private OutputStream output;
|
|
private PrintStream writer;
|
|
|
|
public PostHelper(HttpURLConnection conn) {
|
|
this.conn = conn;
|
|
boundary = Long.toHexString(System.currentTimeMillis());
|
|
}
|
|
|
|
public void connect() throws IOException {
|
|
conn.setRequestMethod("POST");
|
|
conn.setDoOutput(true);
|
|
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
|
|
conn.connect();
|
|
output = conn.getOutputStream();
|
|
writer = new PrintStream(output, false, "UTF-8");
|
|
}
|
|
|
|
private void quoteString(StringBuilder sb, String unquoted)
|
|
{
|
|
if (unquoted == null) {
|
|
sb.append("null");
|
|
return;
|
|
}
|
|
sb.append('"');
|
|
for (int i = 0; i < unquoted.length(); ++i) {
|
|
char c = unquoted.charAt(i);
|
|
if (c == '"' || c == '\\')
|
|
sb.append('\\');
|
|
sb.append(c);
|
|
}
|
|
sb.append('"');
|
|
}
|
|
|
|
public void writeHeading(String name, String filename, String type, String encoding)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("\r\n--").append(boundary).append("\r\n");
|
|
sb.append("Content-Disposition: form-data; name=");
|
|
quoteString(sb, name);
|
|
if (filename!=null) {
|
|
sb.append("; filename=");
|
|
quoteString(sb, filename);
|
|
}
|
|
sb.append("\r\n");
|
|
sb.append("Content-Type: ").append(type).append("\r\n");
|
|
if (encoding!=null)
|
|
sb.append("Content-Transfer-Encoding: ").append(encoding).append("\r\n");
|
|
sb.append("\r\n");
|
|
writer.print(sb.toString());
|
|
}
|
|
|
|
public void writeField(String name, String value){
|
|
writeHeading(name, null, "text/plain; charset=utf-8", null);
|
|
writer.print(value);
|
|
}
|
|
|
|
public void writeField(String name, AbstractId value){
|
|
writeHeading(name, null, value.getMimeType(), "hex");
|
|
writer.print(value.toHex());
|
|
}
|
|
|
|
public void writeField(String name, String filename, InputStream stream) throws IOException {
|
|
writeHeading(name, filename, "application/octet-stream", "binary");
|
|
writer.flush();
|
|
byte[] buffer = new byte[4096];
|
|
int n;
|
|
while ((n = stream.read(buffer)) > 0)
|
|
output.write(buffer, 0, n);
|
|
}
|
|
|
|
public void writeField(String name, RhizomeIncompleteManifest manifest) throws IOException {
|
|
writeHeading(name, null, "rhizome/manifest; format=\"text+binarysig\"", "binary");
|
|
manifest.toTextFormat(writer);
|
|
}
|
|
|
|
public void close(){
|
|
writer.print("\r\n--" + boundary + "--\r\n");
|
|
writer.flush();
|
|
writer.close();
|
|
}
|
|
}
|