2011-06-21 10 views
5

tôi đang làm việc trên một dự án GWT (ứng dụng web):GWT: fileUpload.getFileName() & fakepath

tại một số điểm, người dùng có thể tải lên một tập tin thông qua các ứng dụng thông qua FormPanel.

Như tôi cần tên tập tin, tôi nghĩ rằng tôi có thể sử dụng:

FileUpload upload = new FileUpload(); 
    // ... 
    String name = upload.getFileName(); 

name hóa ra là một cái gì đó như thế này: C:\fakepath\whatever.txt.

Đây có phải là nền tảng chéo không? Điều gì xảy ra trên hệ điều hành khác (Tôi đang sử dụng Windows)?

Trả lời

5

Tên được trả về bằng biểu mẫu tải lên phụ thuộc vào cài đặt bảo mật của trình duyệt.

Trên cửa sổ, C: \ fakepath được sử dụng để che khuất nơi tệp thực sự được đặt. Tên tệp, tuy nhiên, luôn được giữ lại.

Điều tương tự cũng có thể xảy ra trên các hệ điều hành khác, nó sẽ không là C: \ fakepath (không chắc chắn 100% nữa những gì linux có thể trả về, ví dụ).

Tôi hiện đang làm việc trên một hệ thống dựa trên GWT, bằng cách sử dụng FileUpload; và tên tập tin đã không được sai trên bất kỳ os'es khách hàng được sử dụng (chỉ khác nhau (giả) đường dẫn). Điều này đã được sử dụng trên Windows, Ubuntu và OS/x. Bạn có thể lấy tên tệp chính xác một cách an toàn bằng cách tách trên "/" hoặc "\" cuối cùng (lưu ý rằng các tên khác nhau trên mỗi hệ điều hành) hoặc sử dụng phương thức getFileName cho điều đó :).

+3

Tiền tố 'C: \ fakepath' là [" theo thông số kỹ thuật "trong HTML5] (http://www.w3.org/TR/html5/number-state.html#file-upload-state). Mong đợi tất cả các trình duyệt, trên tất cả các hệ điều hành, để cập nhật hành vi của họ sớm nếu chưa thực hiện. Hàm JavaScript 'extractFilename' từ thông số HTML5 dễ dàng chuyển sang Java. –