Vì các nhà phát triển Android khuyên bạn nên sử dụng HttpURLConnection
lớp, tôi đã tự hỏi liệu có ai có thể cung cấp cho tôi một ví dụ hay về cách gửi "tệp" bitmap (thực sự là một luồng trong bộ nhớ) qua POST đến máy chủ HTTP Apache không. Tôi không quan tâm đến cookie hoặc xác thực hoặc bất cứ điều gì phức tạp, nhưng tôi chỉ muốn có một triển khai logic và đáng tin cậy. Tất cả các ví dụ mà tôi đã thấy xung quanh đây trông giống như "hãy thử cái này và có thể nó hoạt động".
Ngay bây giờ, tôi có mã này:
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL("http://example.com/server.cgi");
urlConnection = (HttpURLConnection) url.openConnection();
} catch (Exception e) {
this.showDialog(getApplicationContext(), e.getMessage());
}
finally {
if (urlConnection != null)
{
urlConnection.disconnect();
}
}
trong đó showDialog chỉ nên hiển thị AlertDialog
(trong trường hợp URL không hợp lệ?).
Bây giờ, giả sử rằng tôi tạo ra một bitmap như vậy: Bitmap image = this.getBitmap()
bên trong một điều khiển xuất phát từ View
và tôi muốn gửi nó qua POST. Điều gì sẽ là thủ tục thích hợp để đạt được một điều như vậy? Những lớp nào tôi cần sử dụng? Tôi có thể sử dụng HttpPost
như trong ví dụ này không? Nếu vậy, tôi sẽ xây dựng InputStreamEntity
bitmap như thế nào? Tôi sẽ thấy nó nổi loạn khi được yêu cầu lưu trữ bitmap đầu tiên trong một tệp trên thiết bị.
Tôi cũng nên đề cập rằng tôi thực sự cần gửi mọi pixel chưa được thay đổi của bitmap gốc tới máy chủ, vì vậy tôi không thể chuyển đổi nó thành JPEG.