上传多形式数据
Upload multiform data
Helo
我试图将一些数据上传到我的网络服务器。
白色卷曲效果很好
curl -s -uedoweb-admin:admin -F"data=@/home/raul/test/t1/6376990.pdf;type=application/pdf" -XPUT api.localhost/resource/frl:6376979/data
这里是踪迹
http://pastebin.com/jJmungAy
这里是新方法。
URL myurl;
HttpURLConnection conn;
String port = "9000";
String user = "edoweb-admin";
String password = "admin";
String encoding = Base64.encodeBase64String((user + ":" + password).getBytes());
String boundary = "==" + System.currentTimeMillis() + "===";
String crlf = "\r\n";
String twoHyphens = "--";
String attachmentName = "data";
String attachmentFileName = "6376986.pdf";
DataOutputStream request;
try {
myurl = new URL("http://localhost:9000/resource/frl:6376984/data");
conn = (HttpURLConnection) myurl.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("Accept", "*/*");
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
request = new DataOutputStream(conn.getOutputStream());
request.writeBytes(twoHyphens + boundary + crlf);
request.writeBytes("Content-Disposition: form-data; name=\"" + attachmentName + "\";filename=\""
+ attachmentFileName + "\"" + crlf);
request.writeBytes("Content-Type: application/pdf");
request.writeBytes(crlf);
System.out.println(conn.getResponseCode());
} catch (Exception e) {
throw new RuntimeException(e);
}
我在我的代码和网络服务器上发现了一些问题。我写了一个新方法,现在服务器响应 400。
谁能帮帮我?
我自己查出来的
这里是代码:
public void form_test() {
try {
url = new URL("http://localhost:9000/resource/frl:6376984/data");
httpCon = (HttpURLConnection) url.openConnection();
String userpass = user + ":" + password;
basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
httpCon.setRequestProperty("Authorization", basicAuth);
String fieldName = "data";
File uploadFile = new File("/home/raul/test/frl%3A6376984/6376990.pdf");
String boundary = "" + System.currentTimeMillis() + "";
httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
httpCon.setRequestProperty("file", "6376986.pdf");
httpCon.setUseCaches(false);
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setRequestMethod("PUT");
OutputStream outputStream = null;
try {
outputStream = (httpCon.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter writer = null;
try {
writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String LINE_FEED = "\r\n";
String fileName = uploadFile.getName();
writer.append("--" + boundary).append(LINE_FEED);
writer.append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"")
.append(LINE_FEED);
writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE_FEED);
writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
System.out.println("Content-Transfer-Encoding: binary" + (LINE_FEED));
writer.append(LINE_FEED);
writer.flush();
fileToOutputStream(uploadFile, outputStream);
try {
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
writer.append(LINE_FEED);
writer.flush();
writer.close();
httpCon.disconnect();
try {
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
第一个错误是边界字符串开头的字符“=”。似乎我的网络服务器不喜欢边界字段中有这么多相等,所以我在这里只设置一个:
httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
并从字符串边界移除那些
String boundary = "" + System.currentTimeMillis() + "";
当我尝试上传文件时,我还在 Wireshark 中收到一些错误消息 "Packet size out of Limit" 并在 Java 中收到响应代码 400,但现在使用此方法可以正常工作。
谢谢大家的支持和建议。
Helo
我试图将一些数据上传到我的网络服务器。 白色卷曲效果很好
curl -s -uedoweb-admin:admin -F"data=@/home/raul/test/t1/6376990.pdf;type=application/pdf" -XPUT api.localhost/resource/frl:6376979/data
这里是踪迹 http://pastebin.com/jJmungAy
这里是新方法。
URL myurl;
HttpURLConnection conn;
String port = "9000";
String user = "edoweb-admin";
String password = "admin";
String encoding = Base64.encodeBase64String((user + ":" + password).getBytes());
String boundary = "==" + System.currentTimeMillis() + "===";
String crlf = "\r\n";
String twoHyphens = "--";
String attachmentName = "data";
String attachmentFileName = "6376986.pdf";
DataOutputStream request;
try {
myurl = new URL("http://localhost:9000/resource/frl:6376984/data");
conn = (HttpURLConnection) myurl.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
conn.setRequestProperty("Accept", "*/*");
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
request = new DataOutputStream(conn.getOutputStream());
request.writeBytes(twoHyphens + boundary + crlf);
request.writeBytes("Content-Disposition: form-data; name=\"" + attachmentName + "\";filename=\""
+ attachmentFileName + "\"" + crlf);
request.writeBytes("Content-Type: application/pdf");
request.writeBytes(crlf);
System.out.println(conn.getResponseCode());
} catch (Exception e) {
throw new RuntimeException(e);
}
我在我的代码和网络服务器上发现了一些问题。我写了一个新方法,现在服务器响应 400。
谁能帮帮我?
我自己查出来的
这里是代码:
public void form_test() {
try {
url = new URL("http://localhost:9000/resource/frl:6376984/data");
httpCon = (HttpURLConnection) url.openConnection();
String userpass = user + ":" + password;
basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
httpCon.setRequestProperty("Authorization", basicAuth);
String fieldName = "data";
File uploadFile = new File("/home/raul/test/frl%3A6376984/6376990.pdf");
String boundary = "" + System.currentTimeMillis() + "";
httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
httpCon.setRequestProperty("file", "6376986.pdf");
httpCon.setUseCaches(false);
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setRequestMethod("PUT");
OutputStream outputStream = null;
try {
outputStream = (httpCon.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
PrintWriter writer = null;
try {
writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String LINE_FEED = "\r\n";
String fileName = uploadFile.getName();
writer.append("--" + boundary).append(LINE_FEED);
writer.append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"")
.append(LINE_FEED);
writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE_FEED);
writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
System.out.println("Content-Transfer-Encoding: binary" + (LINE_FEED));
writer.append(LINE_FEED);
writer.flush();
fileToOutputStream(uploadFile, outputStream);
try {
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
writer.append(LINE_FEED);
writer.flush();
writer.close();
httpCon.disconnect();
try {
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
第一个错误是边界字符串开头的字符“=”。似乎我的网络服务器不喜欢边界字段中有这么多相等,所以我在这里只设置一个:
httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
并从字符串边界移除那些
String boundary = "" + System.currentTimeMillis() + "";
当我尝试上传文件时,我还在 Wireshark 中收到一些错误消息 "Packet size out of Limit" 并在 Java 中收到响应代码 400,但现在使用此方法可以正常工作。 谢谢大家的支持和建议。