Tôi đang cố gắng gửi một hình ảnh đến một trang web bằng cách sử dụng các yêu cầu POST HTTP của Java.Gửi tập tin hình ảnh bằng cách sử dụng các kết nối HTTP HTTP HTTP
Tôi đang sử dụng mã cơ sở sử dụng ở đây Upload files from Java client to a HTTP server:
Đây là sửa đổi của tôi:
String urlToConnect = "http://localhost:9000/upload";
File fileToUpload = new File("C:\\Users\\joao\\Pictures\\bla.jpg");
String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.
URLConnection connection = new URL(urlToConnect).openConnection();
connection.setDoOutput(true); // This sets request method to POST.
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
writer = new PrintWriter(new OutputStreamWriter(connection.getOutputStream()));
writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"picture\"; filename=\"bla.jpg\"");
writer.println("Content-Type: image/jpeg");
writer.println();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileToUpload)));
for (String line; (line = reader.readLine()) != null;) {
writer.println(line);
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
writer.println("--" + boundary + "--");
} finally {
if (writer != null) writer.close();
}
// Connection is lazily executed whenever you request any status.
int responseCode = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode); // Should be 200
tôi nhận được một mã số 200 phản ứng cuối cùng, nhưng hình ảnh là buggy, như trong, màu sắc ngẫu nhiên, khiến tôi nghĩ rằng đó là lỗi trong mã hóa ký tự. Tôi đã thử sử dụng UTF-8 như trong ví dụ ban đầu, nhưng điều đó chỉ tạo ra một hình ảnh bị hỏng.
Tôi cũng chắc chắn 100% đó không phải là vấn đề của máy chủ, vì tôi có thể sử dụng các ứng dụng khách còn lại như Advanced Rest Client/Postman và họ có thể gửi hình ảnh mà không gặp vấn đề gì.
Bạn có thể giúp tôi xác định điều gì sai? Cảm ơn bạn.
nghĩ bạn nên thêm tham số 'Content-Transfer-Encoding: binary', kể từ khi tải lên cần được xử lý dưới dạng nhị phân. –
Có thể vấn đề là vì bạn đang sử dụng BufferedReader.readLine() để tải hình ảnh ?? Tất nhiên bạn tìm thấy hình ảnh "lỗi" bởi vì bạn chỉ cần sử dụng InputStream.read (byte, 0, bytes.length) và sau đó outputStream.write (byte) trong đó outputStream là connection.getOutputStream(); –