Sử dụng tính năng nhập biểu mẫu để truy cập máy ảnh và tải ảnh lên ngay lập tức bằng ứng dụng web


88

Tôi đã tìm thấy câu trả lời tuyệt vời này:

Trong iPhone iOS6 và từ Android ICS trở đi, HTML5 có thẻ sau cho phép bạn chụp ảnh từ thiết bị của mình:

    <input type="file" accept="image/*" capture="camera">

Chụp có thể lấy các giá trị như máy ảnh, máy quay và âm thanh.

Có thể tiến thêm một bước này bằng cách sử dụng ajax nào đó để tải ảnh lên ngay sau khi chụp không?

Ví dụ: sử dụng điện thoại của tôi, khi tôi nhấn vào đầu vào, sau đó nó sẽ mở máy ảnh, ngay lập tức máy ảnh sẽ cho phép tôi chụp và lưu ảnh. Khi tôi lưu nó vào máy ảnh, nó được liệt kê bằng nút đầu vào dưới dạng tệp để tải lên.

Điều gì sẽ xảy ra để bức ảnh này được tải lên ngay lập tức thay vì đợi người dùng nhấp vào nút Gửi của biểu mẫu?


1
Bạn đã thử những gì? Bạn đã vấp phải điều gì?
Marcin

Nếu bạn đang quan tâm đến việc điều khiển bên thứ 3, bạn có thể xem xét Kendo UI demos.kendoui.com/web/upload/api.html
habo

1
@Marcin Tôi chưa bao giờ mạnh về javascript nên tôi không chắc nên thử những gì. Những gì tôi đang cố gắng tái tạo là tính năng ứng dụng gốc nơi ảnh ngay lập tức được tải lên dịch vụ hoặc máy chủ từ xa mà không cần thêm bước sau khi chụp ảnh bằng máy ảnh.
micah

Câu trả lời:


103

Thực sự dễ dàng để thực hiện việc này, chỉ cần gửi tệp qua yêu cầu XHR bên trong trình xử lý trao đổi của đầu vào tệp.

<input id="myFileInput" type="file" accept="image/*;capture=camera">

var myInput = document.getElementById('myFileInput');

function sendPic() {
    var file = myInput.files[0];

    // Send file here either by adding it to a `FormData` object 
    // and sending that via XHR, or by simply passing the file into 
    // the `send` method of an XHR instance.
}

myInput.addEventListener('change', sendPic, false);

1
Cảm ơn bạn vì câu trả lời này. Vì vậy, trình xử lý sự kiện này đang xem đầu vào # myFileInput để thay đổi, biết khi nào ảnh được xếp hàng đợi để tải lên? Và sau đó tôi cho rằng nó sẽ thực thi chức năng sendPic với FormData objct tự động tải ảnh lên? Tôi hiểu XHR là gì ở mức rất cao. Tôi đã hiểu đúng?
micah

Trình nghe sự kiện được gọi sau khi người dùng chọn một tệp.
Ray Nicholus

Vì vậy, người nghe sự kiện nhắc sendPic()tải lên ngay tệp sau khi máy ảnh chụp ảnh?
micah

1
Bạn có thể chỉ cho tôi đúng hướng để tìm hiểu cách gửi biểu mẫu qua XHR không?
iluvpinkerton

3
@iluvpinkerton Chắc chắn, hãy sử dụng (hoặc xem qua) Trình tải lên tốt hoặc dạng ajax . Tuyên bố từ chối trách nhiệm - Tôi là nhà phát triển của cả hai thư viện.
Ray Nicholus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.