Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

21 tháng 9, 2012

Gửi file theo đường http upload bằng client

Đây là một vấn đề khá thú vị và người viết cũng đã từng đặt ra câu hỏi này từ lâu, đó là: ta có thể dùng một trình duyệt để upload một/nhiều file lên web qua đường http upload (qua các form), vậy có thể mô phỏng chức năng này trên client (không bằng trình duyệt mà là sử dụng các ứng dụng để upload file y như một trình duyệt). Cho tới tận bây giờ người viết mới có cơ hội để thử nghiệm. Câu trả lời là hoàn toàn được.
Tôi sử dụng bộ thư viện HttpComponent và lập trình bằng ngôn ngữ java.
Dưới đây là mã nguồn tôi trích xuất từ bộ unitest của tôi:
public class testUploadFile {
   
    static String url = "http://127.0.0.1:8080/web/convert/document.pdf";
    static String path = "/home/user/NOTICE.txt";
   
    public static void main(String[] args) throws Exception{
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        reqEntity.addPart("string_field", new StringBody("field value"));
        FileBody bin = new FileBody(new File(path));
        reqEntity.addPart("attachment_field", bin);

        httpPost.setEntity(reqEntity);
        System.out.println("Sending request " + httpPost.getRequestLine());
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity resEntity = response.getEntity();

        if(resEntity != null){
            String page = EntityUtils.toString(resEntity);
            System.out.println("Page: " + page);
        }
    }
}
Trong đoạn mã trên bạn chú ý cho tôi các dòng được bôi màu xanh.
  • HttpMultipartMode.BROWSER_COMPATIBLE tôi chưa rõ được vì sao phải dùng tham số với giá trị như này thì mới có thể upload file lên được, nếu bạn dùng giá trị MultipartEntity thì có vẻ là không thể chạy được, ít ra là với phiên bản của thư viện tôi đang dùng.
  • FileBody: tôi dùng để lấy nội dung file cần gửi.
  • reqEntity.addPart: tôi dùng để đính nội dung file cần gửi vào request.
  • Ngoài ra với hàm addPart bạn có thể dùng để đính thêm nhiều thông tin nữa vào cho request để gửi lên server, thường là các tham số thêm.
  •  httpClient.execute: được dùng để gửi request lên server.
  • response.getEntity: được dùng để nhận response của server.
Nói chung với cách dùng này, ngoài việc bạn có thể gửi file lên server bạn có thể thực hiện được rất nhiều các chức năng khác nữa, như: gửi SOAP, gửi các request lấy nội dung file,....
Chúc bạn thành công.

Edit: Ngoài ra bạn có thể thêm header vào các request bằng cách thêm vào đoạn mã  sau:
 httpPost.setHeader(tên_tham_số, giá_trị);
Ví dụ:
token = "JSESSIONID=1csup075gbkbm; ZM_TEST=true; ZM_AUTH_TOKEN=0_e83a2b9e2617f747bae138454d4dee946814b924_69643d33363a34636639303538612d656339392d343061662d613234312d3933666539353230373963313b6578703d31333a313335313030373830393138313b747970653d363a7a696d6272613b"; 
httpPost.setHeader("Cookie", token);

18 tháng 9, 2012

Công cụ so sánh file và thư mục trên Linux (Ubuntu)

Trong quá trình làm project, tôi thường xuyên có nhu cầu chia nhánh và nhập các nhánh cho project do đó phát sinh nhu cầu làm thế nào để nhanh chóng tìm ra những thay đổi trong một project. Tôi có thể lấy ví dụ ra những câu hỏi sau đây:
  • Có những file mã nguồn nào trong project bị thay đổi? File nào bị xóa? File nào thêm mới.
  • Nội dung của những file bị thay đổi là gì
  • Các file bị thay đổi nằm ở đâu?
  • ....
Để trả lời cho câu hỏi này tôi chọn Meld một merge tool rất mạnh trên Linux. Bạn có thể download nó tại kho phần mềm của Linux hoặc trực tiếp từ địa chỉ http://meldmerge.org/.
Các chức năng chính của meld:
  • So sánh nội dung của 2 file.
  • So sánh nội dung của 2 thư mục
  • Xem nội dung thay đổi giữa 2 file.
  • Merge các thay đổi giữa file, thư mục,
  • ....
Dưới đây là một số hình ảnh của chương trình:


09 tháng 9, 2012

Chèn biểu tượng Yahoo online/offline vào Blog, Website

Để chèn biểu tượng Yahoo online/offline vào Blog hoặc Website, các bạn làm như sau:
Bạn copy đoạn mã sau vào blog/web (paste vào chỗ muốn hiển thị)

<a href="ymsgr:sendIM?Yahoo!ID"><img border="0" src="http://presence.msg.yahoo.com/online?u=Yahoo!ID&m=g&t=ImageNo&l=us" alt="click here to chat" /></a>

Trong đó:

"Yahoo!ID" là tên nick YM của bạn.

"Click here to chat" là dòng chữ hiện ra khi người khác rê chuột vào biểu tượng YM! của bạn, chỉnh sửa tùy thích.

"ImageNo" là kiểu hiện thị thông báo online hay offline, là 1 trong các kiểu 1,2,3, 6-> 16, như sau:

Kiểu 1, 2, 3



Kiểu 6



Kiểu 7



Kiểu 8



Kiểu 9



Kiểu 10



Kiểu 11



Kiểu 12



Kiểu 13



Kiểu 14



Kiểu 15



Kiểu 16





Nguồn http://thuthuatvietnam.com