Lỗi xảy ra khi sử dụng HttpClient upload file có tên tiếng Nhật
HttpClient là thư viện java tương tác với server thông qua giao thức http. Phiên bản mới nhất là 4.4 có thể tải tại trang web http://hc.apache.org/ Tôi sử HttpClient để viết 1 chương trình upload file csv lên server. Dưới đây là đoạn mã tạo ra HttpEntity trong đó bao 1 gồm trường text và 1 file ...
HttpClient là thư viện java tương tác với server thông qua giao thức http.
Phiên bản mới nhất là 4.4 có thể tải tại trang web http://hc.apache.org/
Tôi sử HttpClient để viết 1 chương trình upload file csv lên server. Dưới đây là đoạn mã tạo ra HttpEntity trong đó bao 1 gồm trường text và 1 file đọc từ ổ cứng.
/* * prepare request entity */ public HttpEntity prepareEntity (File file) throws ParseException, IOException { ContentType contentType = ContentType.create("text/plain", Consts.UTF_8); MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); HttpEntity reqEntity = entityBuilder .addTextBody("site[secret]", secret, contentType) .addBinaryBody("site[file]", file) .build(); return reqEntity; }
Mọi thứ có vẻ ổn cho đến khi khách hàng người Nhật gửi 1 file có tên tiếng Nhật. Xem log bên phía server có thể thấy tất cả tiếng Nhật đều bị thay bởi dấu "?".
pry(#<Api::V1::UserAttributesController>)> params => { "file"=> #<ActionDispatch::Http::UploadedFile:0x007f9d92132450 @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name="site[file]"; filename=" ????????.txt" Content-Type: application/octet-stream ", @original_filename=" ????????.txt", @tempfile=#<File:/var/folders/pl/brkj_p2n1vvd_cpf5f1bpb6c0000gn/T/RackMultipart20150512-959-1i29fcw>>} }
Chuyện gì xảy ra vậy? Chẳng lẽ HttpClient không hỗ trợ UTF-8. Xem ví dụ và tài liệu của Apache HttpClient cũng không thấy đề cập đến vấn đề này. Hỏi nhà thông thái Google cả ngày trời cũng không tìm ra câu trả lời.