2012-05-23 41 views
7

Tôi cần tải lên hình ảnh và tệp txt từ ứng dụng của mình lên máy chủ từ xa (Chỉ cần http không có ftp) bằng cách sử dụng java. Ứng dụng của tôi nằm trong khung công tác jsf. Tôi đã tìm kiếm nhưng không tìm thấy những thứ phù hợp. Có ai có thể hướng dẫn tôi không? Trong thực tế, tôi nên tải tệp lên thư mục đặc biệt lên máy chủ từ xa. Tôi có hai ứng dụng với đường dẫn chia sẻ để tải lên tệp, vì vậy để truy cập chúng vào tệp này, tôi decidec để tải lên các tệp được chia sẻ (chẳng hạn như hình ảnh và văn bản) lên máy chủ thứ ba. Ứng dụng đầu tiên sẽ tải các tệp lên máy chủ từ xa này và ứng dụng thứ hai sẽ đọc chúng từ đó. Vì vậy, phần cứng của tôi trong giải pháp này là tải tệp lên máy chủ thứ ba này (trên máy chủ từ xa) bằng cách sử dụng http.cách tải tệp lên máy chủ từ xa http bằng cách sử dụng java?

+0

Mọi người gợi ý commons FileUpload để gửi các tập tin là ** sai **. Nó có ý định * phân tích cú pháp * yêu cầu nhiều phần/biểu mẫu dữ liệu ở phía bên kia, chứ không phải * tạo và gửi * yêu cầu nhiều phần/dữ liệu biểu mẫu ở bên cạnh bạn. – BalusC

+1

MAYBE câu hỏi phải được làm rõ hơn. Đừng mong đợi câu trả lời chính xác với một câu hỏi này mờ! –

+0

Tôi có hai ứng dụng với đường dẫn chia sẻ để tải lên tệp, vì vậy để truy cập chúng vào tệp này, tôi decidec để tải lên các tệp được chia sẻ (chẳng hạn như hình ảnh và văn bản) vào máy chủ thứ ba. Ứng dụng đầu tiên sẽ tải các tệp lên máy chủ từ xa này và ứng dụng thứ hai sẽ đọc chúng từ đó. Vì vậy, phần cứng của tôi trong giải pháp này là tải các tệp lên máy chủ thứ ba này (trên máy chủ từ xa) bằng cách sử dụng http. – zorro6064

Trả lời

1

Bạn có thể sử dụng httpclient.

Gửi các tệp bằng cách sử dụng POST làm phương thức.

2

Sử dụng đoạn mã sau:

 byte[] data = bos.toByteArray();//convert ur file into byte[] 
     HttpClient httpClient = new DefaultHttpClient();//Client 
     HttpPost postRequest = new HttpPost(YOUR_SERVER_URL);//Post Request to specified URL 
     ByteArrayBody bab = new ByteArrayBody(data, "a.txt"); 
     MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);// Multipart data 
     reqEntity.addPart("uploadingFile", bab); //adding data to request entity 
     postRequest.setEntity(reqEntity);//adding request entity to post request 
     HttpResponse response = httpClient.execute(postRequest); 
+0

Tôi nên thêm url máy chủ từ xa của mình ở đâu? Trong mã của bạn, "a.txt" là gì? Bạn có thể giải thích thêm cho tôi không? – zorro6064

+0

thêm url máy chủ ur vào YOUR_SERVER_URL ... a.txt là tệp mà tôi đã gửi 2 máy chủ –

+0

Tôi đã sử dụng mã của bạn, nhưng không có gì được di chuyển và không có ngoại lệ. Bạn có thể hướng dẫn tôi không? Tôi đã không thay đổi gì trong mã trên của bạn. Cảm ơn – zorro6064

6

Để tải lên tập tin vào một thư mục cụ thể, API máy chủ của bạn phải hỗ trợ đó.

Server side để tiếp nhận các file tải lên, bạn có thể sử dụng http://commons.apache.org/fileupload/

phía khách hàng để gửi một yêu cầu tập tin tải lên, bạn có thể sử dụng https://hc.apache.org/httpcomponents-client-ga/index.html

+0

Thư mục cụ thể trên máy chủ từ xa. ứng dụng của tôi chạy trên máy chủ của tôi, máy chủ tệp không phải là nơi ứng dụng của tôi chạy. – zorro6064

+0

Như tôi đã nói, máy chủ lưu trữ/máy chủ tệp từ xa phải cung cấp API để chỉ định đích từ xa khi bạn tải lên qua HTTP – gigadot

0

Theo yêu cầu của bạn, bạn cần phải gửi nhiều hình ảnh & tập tin văn bản , Vì vậy, tải lên nhiều tệp HTTP đa phần có vẻ là giải pháp phù hợp.Bạn có thể nhận thêm thông tin về điều này từ đây: http://commons.apache.org/fileupload/using.html

-3

make

@Autowired 
ServletContext c; 

hoặc đưa đối tượng

byte[] bytes = file.getBytes(); 

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 
Path path = Paths.get(UPLOAD_FOLDEdR +"/"+ file.getOriginalFilename()); 
Files.write(path, bytes); 
System.out.println(path); 
String Pic_Name =file.getOriginalFilename(); 
+1

Bạn có thể chỉnh sửa câu trả lời của mình để có ý nghĩa không? Hiện tại, mã khó đọc và không thực sự rõ ràng cách giải quyết vấn đề này. Vui lòng giải thích câu trả lời của bạn tốt hơn. – melwil

Các vấn đề liên quan