Tôi có thể gửi tệp dưới dạng nhiều phần bằng XMLHttpRequest
đến một servlet không? Tôi đang tạo một biểu mẫu và gửi nó dưới dạng nhiều phần, nhưng bằng cách nào đó tôi không nhận được phản hồi để tải lên thành công. Tôi không muốn trang được làm mới, vì vậy nó phải diễn ra bởi ajax.Gửi tệp dưới dạng nhiều phần thông qua xmlHttpRequest
Trả lời
Chỉ có thể với XHR FormData
API (trước đây được biết đến là một phần của "XHR2" hoặc "XHR cấp 2", hiện được gọi là "Tính năng nâng cao XHR").
Với HTML này,
<input type="file" id="myFileField" name="myFile" />
bạn có thể tải nó như sau:
var formData = new FormData();
formData.append("myFile", document.getElementById("myFileField").files[0]);
var xhr = new XMLHttpRequest();
xhr.open("POST", "myServletUrl");
xhr.send(formData);
XHR sẽ chăm sóc về tiêu đề thích hợp và mã hóa cơ thể yêu cầu và các tập tin sẽ trong ví dụ này có sẵn trong phía máy chủ là form-data
một phần có tên myFile
.
Bạn cần lưu ý rằng FormData
API không được hỗ trợ trong các trình duyệt cũ hơn. Tại caniuse.com bạn có thể thấy rằng ứng dụng hiện được triển khai trong Chrome 7+, Firefox 3.5+, Safari 5+, IE 10+ và Opera 12+.
Cách khác là sử dụng jQuery Form plugin. Toàn bộ mẫu của bạn, khi viết và hoạt động bình thường mà không cần bất kỳ dòng mã JavaScript, sau đó sẽ ngay lập tức được ajaxified chỉ với dòng sau:
$("#formId").ajaxForm(function(response) {
// Handle ajax response here.
});
Nó cũng hỗ trợ tải lên tập tin cũng bằng một thủ thuật iframe ẩn. Xem thêm this jQuery Form documentation để được giải thích chi tiết. Bạn chỉ có thể cần thay đổi mã servlet để có thể chặn cả hai yêu cầu bình thường (đồng bộ) và ajax (không đồng bộ). Xem thêm câu trả lời này cho một ví dụ cụ thể: Simple calculator with JSP/Servlet and Ajax
Dù bằng cách nào, các tập tin được tải lên thì nên có sẵn trong phương pháp doPost()
của một servlet @MultipartConfig
như sau:
Part myFile = request.getPart("myFile");
Hoặc nếu bạn vẫn còn trên Servlet 2,5 trở lên, sử dụng Apache Commons FileUpload theo cách thông thường. Xem thêm câu trả lời này cho ví dụ cụ thể: How to upload files to server using JSP/Servlet?
Và điều gì sẽ xảy ra nếu trong trang của chúng tôi, chúng tôi tạo ra nhiều tệp đầu vào tự động? chúng tôi có thể tạo ID không? – walox
Nó không thể gửi multipart/form-data
với XHR (update:. mặc dù nó có thể trong các trình duyệt hiện đại, với XHR2
Xem câu trả lời BalusC của).
Cách phổ biến để đạt được điều bạn muốn là sử dụng số thông thường, thay vào đó, thay vào đó, thay vào đó là iframe
. Bằng cách này, chỉ iframe
mới được làm mới khi tải lên.
Thực ra tôi muốn trả lời xem tệp có được tải lên hay không. Ngoài ra, tôi muốn vị trí nơi hình ảnh được tải lên. –
Tejasva: Nhìn vào ví dụ từ Napolux, nó chỉ rõ cách bạn có thể gọi hàm js trên cửa sổ cha khi tải lên hoàn tất. Nó cũng có thể cung cấp vị trí hình ảnh. –
@LinusGThiel Có thể. Xem câu trả lời của BalusC. –
- 1. Gửi nhiều tệp qua Bluetooth
- 2. sendmailR (Part2): Gửi tệp dưới dạng tệp đính kèm thư
- 3. Gửi thông số chuỗi truy vấn dưới dạng một phần của biểu mẫu đăng
- 4. Gửi tệp đã tải lên dưới dạng tệp đính kèm
- 5. jQuery.ajax() gửi yêu cầu POST dưới dạng GET trong phần mở rộng của Chrome
- 6. Khởi chạy tập lệnh dưới dạng root thông qua ADB
- 7. Gửi email có tệp HTML dưới dạng nội dung (C#)
- 8. Tạo thông điệp nhiều phần trong định dạng MIME Freemarker mẫu qua Spring 3 JavaMail
- 9. Gửi nội dung PartialView dưới dạng email
- 10. Gửi cả POST và GET dưới dạng
- 11. jquery phát hiện nút gửi dưới dạng
- 12. git commit symlink dưới dạng tệp thông thường
- 13. Thẻ neo dưới dạng nút gửi?
- 14. sharpNLP dưới dạng phần mở rộng tệp .nbin
- 15. Cách gửi tệp zip dưới dạng tệp đính kèm trong python?
- 16. Tải lên tệp có XMLHttprequest - Thiếu đường viền trong nhiều phần/biểu mẫu-dữ liệu
- 17. tải xuống nhiều tệp dưới dạng zip .net
- 18. tiêu đề tùy chỉnh thông qua biểu mẫu html gửi
- 19. Tôi làm cách nào để gửi toàn bộ dự án .Net dưới dạng tệp đính kèm qua gmail?
- 20. Hiển thị phần tử dưới dạng văn bản được định dạng trước qua CSS
- 21. Gửi tệp qua PSSession
- 22. Làm cách nào để gửi dữ liệu dưới dạng nhị phân qua ổ cắm Java?
- 23. Làm thế nào để gửi một tệp tin Django FileField dưới dạng tệp đính kèm?
- 24. Gửi e-mail trong phần đính kèm Pdf dưới dạng dòng
- 25. Tài nguyên Java dưới dạng tệp
- 26. Tải lên tệp dưới dạng một phần của biểu mẫu với các trường khác
- 27. Dịch vụ báo cáo dưới dạng PDF thông qua WebRequest trong C# 3.5 "Loại tệp được hỗ trợ"
- 28. Gửi tệp Multipart dưới dạng tham số POST với các yêu cầu RestTemplate
- 29. JavaScript: lưu chuỗi base64 dưới dạng tệp
- 30. PHPMailer, gửi đính kèm dưới dạng tên khác
Xem thêm: [Gửi hình ảnh từ các phần tử Canvas sử dụng Ajax và PHP $ _FILES] (http://stackoverflow.com/a/5303242/938089?sending-images-from- canvas-elements-using-ajax-and-php-files) –