2013-08-29 26 views
5

Chúng tôi đã tạo thành công ứng dụng ngoại tuyến bằng HTML5. Những gì nó làm là lưu trữ dữ liệu trong indexedDB hoặc trong localStorage, khi trực tuyến, lưu trữ cục bộ và cơ sở dữ liệu trực tuyến sẽ được đồng bộ hóa. Mọi thứ đều ổn cho đến khi chúng tôi quyết định thêm chức năng để tải lên hình ảnh.Làm việc với hình ảnh trong ứng dụng ngoại tuyến HTML5?

1) Vì ứng dụng hoạt động ngoại tuyến, chúng tôi không thể tải lên hình ảnh trong máy chủ, chúng tôi sẽ đặt chúng ở đâu?

có thể Giải pháp:

  • khi ngoại tuyến, lưu đường dẫn, khi người dùng được trực tuyến, tải lên các hình ảnh bằng cách tạo ra các yếu tố đầu vào và gán đường dẫn đến thuộc tính giá trị của nó. Vấn đề với cách tiếp cận này là chúng tôi không thể thay đổi thuộc tính giá trị của phần tử đầu vào và chúng tôi không thể tải lên đường dẫn đầy đủ của hình ảnh. Có vẻ như giải pháp này là không thực sự có thể.
  • lưu hình ảnh trong indexedDB hoặc localStorage, điều này có khả thi không?

2) Nếu chúng tôi lưu thành công hình ảnh trong indexedDB hoặc localStorage, chúng ta sẽ tải nó lên như thế nào khi người dùng trực tuyến?

có thể Giải pháp:

  • WebSocket - Tôi đã không chạm này được nêu ra.
  • Flash - nó có hoạt động trên iPhone không? Chắc là không.

3) Nếu chúng tôi lưu thành công hình ảnh trong indexedDB hoặc localStorage, chúng ta sẽ hiển thị nó như thế nào trên trang? Các phần tử hình ảnh sử dụng thuộc tính src để xác định hình ảnh nào sẽ hiển thị, có phương pháp nào khác như sử dụng hình ảnh nhị phân không?

Nếu bạn phải đối mặt với tình huống tương tự trước đây, bạn đã làm gì để đạt được mục tiêu của mình?

+1

Chuyển đổi hình ảnh thành chuỗi base64 và lưu trữ chúng, sau đó bạn có thể tải chúng lên bằng Ajax hoặc bất kỳ thứ gì bạn thích và bạn có thể đặt chuỗi base64 trong _src_ attr của phần tử img –

Trả lời

6

Sử dụng FileAPI có sẵn trong HTML5. Bạn có thể "tải lên" hình ảnh của bạn ở đó, và sau đó, khi máy chủ trực tuyến trở lại, bạn có thể chuyển chúng, ngay cả khi sử dụng XHR truyền thống.

FileAPI là an toàn để sử dụng như hầu hết các trình duyệt chính hỗ trợ nó: http://caniuse.com/#feat=fileapi

chi tiết:

1) Viết các tập tin để permament hoặc temporary lưu trữ (theo quy định của ứng dụng của chúng tôi). Lưu ý rằng bộ nhớ temporary sẽ bị xóa khi phiên thoát (theo quyết định của trình duyệt).

Xem ở đây để hướng dẫn: http://www.html5rocks.com/en/tutorials/file/filesystem/?ModPagespeed=noscript

2) Tôi sẽ sử dụng XHRequests truyền thống để truyền cho họ. Nó dễ dàng hơn và được thử nghiệm tốt (bạn không phải thiết kế giao thức mới từ đầu).

3) Đó là điều tốt nhất :) Bạn có thể nhận đúng URL ngay từ API tệp, vì vậy hình ảnh được hiển thị từ bộ nhớ cache của bạn. Xem tại đây: http://www.html5rocks.com/en/tutorials/file/filesystem/?ModPagespeed=noscript#toc-filesystemurls

+0

. những rắc rối hiển thị với base64?Chưa bao giờ nghe nói về chúng –

+0

+1 Cảm ơn API tệp! Tôi sẽ nghiên cứu nó, có lẽ đó là tất cả những gì tôi cần. – dpp

+0

Nếu bạn đếm IE là trình duyệt, thì có, bạn sẽ gặp sự cố. Mặc dù, tôi đã kiểm tra lại, và nó có vẻ ít vấn đề hơn trước đây. Tôi sẽ xóa nhận xét của tôi về nó. – thriqon

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