2015-04-01 26 views
11

Tôi có một trang rất cơ bản bao gồm yếu tố <input type="file">. Khi tôi gửi biểu mẫu với tệp được chọn, máy chủ phản hồi bằng bảng tính được mở trong Excel (một "cửa sổ mới"). Ý nghĩa của hành vi này là màn hình ban đầu và phần tử đầu vào vẫn được hiển thị trong IE. Nếu tôi thay đổi dữ liệu trên đĩa của tệp đã chọn và gửi lại biểu mẫu, Internet Explorer sẽ tải lên nội dung cũ lần thứ hai; những thay đổi mới nhất của tôi không có trong nội dung được gửi đến máy chủ. Nếu tôi chọn tệp thông qua nút Duyệt ... của đầu vào lần nữa, nội dung tệp mới sẽ được tải lên như mong đợi. Firefox luôn gửi nội dung của tập tin từ đĩa, đó là hành vi mong muốn/mong muốn. Dường như Internet Explorer đang làm một số loại bộ nhớ đệm của nội dung tệp được tải lên.Tải lên tệp trong Internet Explorer Caching?

Có cách nào để vô hiệu hóa tính năng "" này và có IE kéo dữ liệu ra khỏi đĩa mỗi khi biểu mẫu được gửi không?

Có tài liệu nào về hành vi này không? Đây là lần đầu tiên tôi gặp nó và tìm kiếm của tôi phần lớn trống rỗng.

+0

Điều gì sẽ xảy ra nếu nó không lưu trong bộ đệm * tải lên * (mà tôi chưa bao giờ nghe nói và sẽ thực sự lạ) nhưng kết quả được tạo ra? Đó có phải là kết quả gửi bộ nhớ đệm thích hợp (hay đúng hơn, không có bộ nhớ đệm) tiêu đề? –

+0

@Pekka: Nhật ký máy chủ hiển thị trình duyệt thực hiện yêu cầu POST và trả lại 200 OK cho mỗi lần tải lên. Nếu nó đã được bộ nhớ đệm phản ứng, tôi mong đợi hoặc là xem Internet Explorer bỏ qua các yêu cầu hoàn toàn hoặc cho máy chủ để trở về một 304 Không sửa đổi trạng thái. – Todd

+0

Công nghệ nào đang được sử dụng ở phía máy chủ để xử lý việc tải lên và xử lý tệp? Bạn có thể ghi nhật ký của các tệp đã tải lên để xem liệu trình duyệt có thực sự đang gửi sai tệp hay không hoặc có vấn đề gì khác không về phía máy chủ –

Trả lời

4

Bạn có thể thử nghiệm phỏng đoán với live demos posted on MS-Connect.

[...] lỗi bắt đầu với IE10, khi FileList và Blob được triển khai.
input.files là một tệp danh sách tệp html5/blob.
Để phổ biến nó, IE blobs mỗi lựa chọn filepicker. Chúng có trạng thái "snapshot" (thuật ngữ W3C).
Chúng được đồng bộ hóa trong trường hợp tệp được chọn được cập nhật trước khi gửi.
Lỗi là, IE không phát hiện được nếu tệp bị xóa, đổi tên hoặc thay thế.
Ảnh chụp nhanh của trình quay phim bị lỗi trong trường hợp đó.

Đây là những gì sẽ xảy ra khi một tập tin được chọn trong filepicker, sau đó đổi tên thành sửa, trước khi nộp các lựa chọn filepicker. Mặc dù tệp mới (có tên tệp gốc) đã được thay thế, tệp gốc (hiện có khác nhautên và văn bản sửa đổi) được gửi trong biểu mẫu. Sao có thể như thế được? Nó giống như nó được theo dõi thông qua ntfs ObjectID, được sử dụng với Distributed Link Tracking. Lưu ý cẩn thận trong ảnh chụp màn hình này, tệp tên không đồng ý với tệp nội dung.

Vì vậy, nó không phải là một "bộ nhớ đệm" điều gì cả. Đó là một lỗi theo dõi.

0

Tôi chưa tự mình thử, nhưng bạn có thể muốn sử dụng thông số giả cho hành động biểu mẫu và thay đổi giá trị của nó ngay trước mỗi hành động gửi. Ví dụ: nếu bạn có <form action="foo.php">, hãy thay đổi điều này thành <form action="foo.php?dummy=0"> và sau đó sử dụng javascript để thay đổi phần hành động để trở thành ví dụ: action="foo.php?dummy=1" và cứ tiếp tục như vậy trước mỗi lần gửi.

1

Bạn đã cố sử dụng thuộc tính autocomplete cho thẻ input của mình chưa?

Ví dụ

<input type="text" autocomplete="off" /> 

nên buộc giá trị được không bao giờ được tái sử dụng như đã nêu trong W3C docs:

autocomplete = on/tắt/default

  • trên - Trạng thái trên chỉ ra rằng val ue không phải là đặc biệt nhạy cảm và người dùng có thể mong đợi để có thể dựa vào người dùng của mình đại lý để ghi nhớ các giá trị mà anh ta đã nhập cho điều khiển đó.
  • tắt - Tình trạng tắt chỉ ra hoặc là dữ liệu đầu vào của kiểm soát đặc biệt nhạy cảm (ví dụ mã kích hoạt cho một loại vũ khí hạt nhân ); hoặc đó là giá trị sẽ không bao giờ được sử dụng lại (ví dụ: khóa một lần cho thông tin đăng nhập ngân hàng) và người dùng sẽ do đó phải nhập dữ liệu một cách rõ ràng mỗi lần thay vì có thể dựa vào UA để điền trước giá trị cho anh ta; hoặc tài liệu cung cấp cơ chế tự động hoàn thành của riêng mình và không muốn tác nhân người dùng cung cấp các giá trị tự động hoàn thành.
0

Tôi gặp vấn đề tương tự trong IE 10,11. Tôi có thể sửa chữa nó sử dụng mã dưới đây

var file = $('input[type="file"]'); 
file.removeAttr('value'); 
var cloneFile = file.clone(); 
file.parent().get(0).replaceChild(cloneFile.get(0), file.get(0)); 

Nếu bạn đang nhận được nhiều đối tượng cho tập tin sau đó sử dụng eq (-2) sau khi chọn như

$('input[type="file"]').eq(-2); 

Bình luận tôi trong mọi trường hợp vấn đề.

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