Драг-н-дроп для загрузки файлов — Рецепты — Дока
Задача
СкопированоЗагрузка пользователем файлов на сервер — часто встречающаяся задача при создании сайтов и приложений. Текущие возможности JavaScript позволяют нам выбирать нужный файл простым его перетаскиванием в установленную область страницы браузера.
Широкую поддержку событий перетаскивания обеспечивают современные десктопные браузеры, среди мобильных браузеров такая поддержка пока низкая. Поэтому, если необходимо реализовать передачу файла на сервер также и для пользователей мобильных устройств, стоит добавлять возможность выбрать файл с использованием элемента <input type
.
В статье будет рассматриваться вариант выбора файла с использованием перетаскивания.
Загрузка файла на сервер состоит из трёх частей:
- Выбор пользователем файла на своём устройстве.
- Проверка параметров обработки файла и формирование данных с обращением к серверу.
- Обработка данных на сервере и отправка ответа клиенту.
Организовать полный процесс загрузки файла возможно только с использованием серверной части, реализация которой выходит за рамки данной статьи. Поэтому далее будет рассмотрена организация отправки файла на стороне клиента: HTML-разметка, стилизация элементов и JS-код для передачи файла на сервер.
Сама же серверная часть для обмена файлами может быть реализована на разных языках программирования. Например, про обработку файлов на стороне сервера с использованием PHP можно подробнее узнать в документации PHP.
Решение для загрузки файла
СкопированоНа странице разместим HTML-разметку с необходимыми элементами:
<div> <div> <div> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <path fill="#fff" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"> <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/> </path> </svg> </div> <p>Для загрузки изображения перетащите его в эту область</p> <p></p> </div></div><div> <div> <div> <svg xmlns="http://www. w3.org/2000/svg" viewBox="0 0 100 100"> <path fill="#fff" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"> <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/> </path> </svg> </div> <p>Для загрузки изображения перетащите его в эту область</p> <p></p> </div> </div>
Для внешнего оформления элементов создадим следующие CSS-правила:
p { text-align: center;}.upload-zone { position: relative; display: flex; flex-direction: column; justify-content: center; align-items: center; width: 100%; height: 250px; padding: 55px 40px; overflow: hidden; background-color: #C56FFF; color: #000000; font-size: 24px; font-weight: 500;}.upload-zone_dragover { background-color: #593273;}.upload-hint { display: none;}.upload-hint_visible { display: block; pointer-events: none;}. upload-loader { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%;}.upload-loader_visible { display: flex; justify-content: center; align-items: center; background-color: #593273;}.upload-loader__image { width: 150px; height: 150px;}p { text-align: center; } .upload-zone { position: relative; display: flex; flex-direction: column; justify-content: center; align-items: center; width: 100%; height: 250px; padding: 55px 40px; overflow: hidden; background-color: #C56FFF; color: #000000; font-size: 24px; font-weight: 500; } .upload-zone_dragover { background-color: #593273; } .upload-hint { display: none; } .upload-hint_visible { display: block; pointer-events: none; } .upload-loader { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .upload-loader_visible { display: flex; justify-content: center; align-items: center; background-color: #593273; } .upload-loader__image { width: 150px; height: 150px; }
В конце HTML-страницы или в отдельном JS-файле добавим код, который обеспечит связь между пользователем и сервером:
const BYTES_IN_MB = 1048576const dropFileZone = document. getElementById('dropFile_Zone')const hintText = document.getElementById('uploadFile_Hint')const outputText = document.getElementById('uploadFile_Status')const loaderImage = document.getElementById('uploadFile_Loader')let fileInstance['dragover', 'drop'].forEach(function(event) { document.addEventListener(event, function(evt) { evt.preventDefault() return false })})dropFileZone.addEventListener('dragenter', function(event) { dropFileZone.classList.add('upload-zone_dragover')})dropFileZone.addEventListener('dragleave', function(event) { dropFileZone.classList.remove('upload-zone_dragover')})dropFileZone.addEventListener('drop', function(event) { fileInstance = event.dataTransfer.files[0] if (fileInstance.size > 5 * BYTES_IN_MB) { alert('Принимается файл до 5 МБ') return false } if (fileInstance.type.startsWith('image/')) { processingUploadFile(fileInstance) } else { alert('Можно загружать только изображения') return false }})function processingUploadFile(fileInstanceUpload) { if(fileInstanceUpload != undefined) { const dropZoneData = new FormData() const xhr = new XMLHttpRequest() dropZoneData. append('file', fileInstanceUpload) xhr.upload.addEventListener('progress', function() { hintText.classList.remove('upload-hint_visible') loaderImage.classList.add('upload-loader_visible') }) xhr.open('POST', 'upload_processing.php', true) xhr.send(dropZoneData) xhr.onload = function (event){ if (xhr.status == 200) { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл «${fileInstanceUpload.name}» загружен успешно` } else { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл не загружен. Ошибка ${xhr.status} при загрузке файла.` } } }}Открыть демо в новой вкладке
const BYTES_IN_MB = 1048576 const dropFileZone = document.getElementById('dropFile_Zone') const hintText = document.getElementById('uploadFile_Hint') const outputText = document.getElementById('uploadFile_Status') const loaderImage = document.getElementById('uploadFile_Loader') let fileInstance ['dragover', 'drop']. forEach(function(event) { document.addEventListener(event, function(evt) { evt.preventDefault() return false }) }) dropFileZone.addEventListener('dragenter', function(event) { dropFileZone.classList.add('upload-zone_dragover') }) dropFileZone.addEventListener('dragleave', function(event) { dropFileZone.classList.remove('upload-zone_dragover') }) dropFileZone.addEventListener('drop', function(event) { fileInstance = event.dataTransfer.files[0] if (fileInstance.size > 5 * BYTES_IN_MB) { alert('Принимается файл до 5 МБ') return false } if (fileInstance.type.startsWith('image/')) { processingUploadFile(fileInstance) } else { alert('Можно загружать только изображения') return false } }) function processingUploadFile(fileInstanceUpload) { if(fileInstanceUpload != undefined) { const dropZoneData = new FormData() const xhr = new XMLHttpRequest() dropZoneData.append('file', fileInstanceUpload) xhr.upload.addEventListener('progress', function() { hintText. classList.remove('upload-hint_visible') loaderImage.classList.add('upload-loader_visible') }) xhr.open('POST', 'upload_processing.php', true) xhr.send(dropZoneData) xhr.onload = function (event){ if (xhr.status == 200) { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл «${fileInstanceUpload.name}» загружен успешно` } else { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл не загружен. Ошибка ${xhr.status} при загрузке файла.` } } } }
Полный вариант загрузки файла с его сохранением на сервере выглядит так:
Разбор решения
СкопированоРазметка
СкопированоДля обработки файла используется контейнер с идентификатором drop
. Внутри этого блока помещаются вспомогательные элементы, которые обеспечивают информационное взаимодействие с пользователем:
- анимированный
svg
в качестве индикатора обработки файла;- элемент - текстовый элемент с идентификатором
upload
, который покажет информацию о результате загрузки.File _ Status
Для каждого элемента, который участвует в процессе обработки файла, указывается атрибут id
— это позволит JS-коду обращаться к нужным элементам для выполнения необходимых действий.
<div> <div> <div> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> <path fill="#fff" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"> <animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/> </path> </svg> </div> <p>Для загрузки изображения перетащите его в эту область</p> <p></p> </div></div>
<div>
<div>
<div>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<path fill="#fff" d="M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3. 9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50">
<animateTransform attributeName="transform" attributeType="XML" type="rotate" dur="1s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/>
</path>
</svg>
</div>
<p>Для загрузки изображения перетащите его в эту область</p>
<p></p>
</div>
</div>
Для показа процесса выполнения загрузки файла также можно использовать специальный элемент <progress>
Стили
СкопированоОбласть для загрузки файла выделим фоновым цветом и укажем фиксированную высоту:
.upload-zone { position: relative; display: flex; flex-direction: column; justify-content: center; align-items: center; width: 100%; height: 250px; padding: 55px 40px; overflow: hidden; background-color: #C56FFF; color: #000000; font-size: 24px; font-weight: 500;}
. upload-zone {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 100%;
height: 250px;
padding: 55px 40px;
overflow: hidden;
background-color: #C56FFF;
color: #000000;
font-size: 24px;
font-weight: 500;
}
При перетаскивании файла в область загрузки будем менять фоновый цвет при помощи дополнительного класса:
.upload-zone_dragover { background-color: #593273;}
.upload-zone_dragover {
background-color: #593273;
}
Контейнер с индикатором обработки файла изначально скрыт и с абсолютным позиционированием занимает весь родительский блок:
.upload-loader { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%;}
.upload-loader {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
После появления файла в области загрузки и до конца его обработки, индикатор будет показываться с использованием дополнительного класса:
. upload-loader_visible { display: flex; justify-content: center; align-items: center; background-color: #593273;}.upload-loader__image { width: 150px; height: 150px;}
.upload-loader_visible {
display: flex;
justify-content: center;
align-items: center;
background-color: #593273;
}
.upload-loader__image {
width: 150px;
height: 150px;
}
JavaScript
СкопированоДля начала объявим переменные и получим все необходимые элементы DOM-дерева, чтобы подписываться на события:
- переменная
BYTES
, в которой указывается количество байтов в одном мегабайте, будет использоваться при вычислении размера файла;_ IN _ MB drop
устанавливает область обработки выбранного файла;File Zone hint
указывает на подсказку о загрузке файла;Text - в переменной
output
указывается элемент, в котором будет показан полученный от сервера ответ;Text - переменная
loader
определяет графический элемент индикатора обработки файла;Image - в переменной
file
будут храниться данные выбранного файла.Instance
const BYTES_IN_MB = 1048576const dropFileZone = document.getElementById('dropFile_Zone')const hintText = document.getElementById('uploadFile_Hint')const outputText = document.getElementById('uploadFile_Status')const loaderImage = document.getElementById('uploadFile_Loader')let fileInstance
const BYTES_IN_MB = 1048576
const dropFileZone = document.getElementById('dropFile_Zone')
const hintText = document.getElementById('uploadFile_Hint')
const outputText = document.getElementById('uploadFile_Status')
const loaderImage = document.getElementById('uploadFile_Loader')
let fileInstance
Поскольку переменная file
объявляется без присвоения значения, используется ключевое слово let
. Об отличиях переменных и принципах работы с ними более развёрнуто рассказывается в статье «Переменные const
, let
и var
».
При отслеживании перетаскивания файла будут использоваться следующие события:
dragover
выполняется во время перемещения файла над областью обработки файла;dragenter
срабатывает, когда файл входит в область обработки файла;dragleave
срабатывает, если файл покидает область обработки, но ещё не «сброшен»;drop
выполняется в тот момент, когда пользователь отпустил кнопку мыши и выбранный файл был помещён («сброшен») в заданную область.
Когда при перетаскивании выбранный файл будет находиться в пределах активной страницы, браузер его откроет. Чтобы файл был обработан в назначенной для этого области, необходимо отменить стандартное поведение браузера для событий dragover
и drop
путём вызова метода prevent
:
['dragover', 'drop'].forEach(function(event) { document.addEventListener(event, function(evt) { evt.preventDefault() return false })})dropFileZone.addEventListener('dragenter', function(event) { dropFileZone.classList.add('upload-zone_dragover')})dropFileZone.addEventListener('dragleave', function(event) { dropFileZone.classList.remove('upload-zone_dragover')})
['dragover', 'drop'].forEach(function(event) {
document.addEventListener(event, function(evt) {
evt.preventDefault()
return false
})
})
dropFileZone.addEventListener('dragenter', function(event) {
dropFileZone. classList.add('upload-zone_dragover')
})
dropFileZone.addEventListener('dragleave', function(event) {
dropFileZone.classList.remove('upload-zone_dragover')
})
Загрузка файлов большого размера увеличивает нагрузку на сервер, поэтому установим максимальный размер файла в 5 МБ. Проверку размера файла выполним на этапе его помещения в область загрузки. Для этого получим информацию о файле с помощью объекта data
, который хранит данные о событии перетаскивания. Также зададим условие, что загружать можно будет только изображения.
dropFileZone.addEventListener('drop', function uploadFile(event) { fileInstance = event.dataTransfer.files[0] if (fileInstance.size > 5 * BYTES_IN_MB) { alert('Принимается файл до 5 МБ') return false } if (fileInstance.type.startsWith('image/')) { processingUploadFile(fileInstance) } else { alert('Можно загружать только изображения') return false }})
dropFileZone.addEventListener('drop', function uploadFile(event) {
fileInstance = event. dataTransfer.files[0]
if (fileInstance.size > 5 * BYTES_IN_MB) {
alert('Принимается файл до 5 МБ')
return false
}
if (fileInstance.type.startsWith('image/')) {
processingUploadFile(fileInstance)
} else {
alert('Можно загружать только изображения')
return false
}
})
Чтобы отправить файл на сервер без перезагрузки страницы, воспользуемся XML
— набором механизмов для обмена данными между клиентом и сервером без перезагрузки страницы. Подробней о нём можно почитать на MDN.
Основную работу будет выполнять функция processing
, которая принимает выбранный пользователем файл file
и отправляет его на сервер:
function processingUploadFile(fileInstanceUpload) { if(fileInstanceUpload != undefined) { // код функции рассматривается ниже }}
function processingUploadFile(fileInstanceUpload) {
if(fileInstanceUpload != undefined) {
// код функции рассматривается ниже
}
}
Первым делом объявляем переменные:
drop
, в которой с использованием объектаZone Data Form
будут храниться данные для отправки на сервер;Data xhr
для обращения к серверу с использованиемXML
.Http Request
const dropZoneData = new FormData()const xhr = new XMLHttpRequest()
const dropZoneData = new FormData()
const xhr = new XMLHttpRequest()
После этого указываем последовательность работы XML
при передаче файла на сервер:
- Выбранный файл сохраняется для отправки.
- Для
XML
добавляется обработчик событияHttp Request progress
, который отслеживает процесс загрузки файла. Чтобы показать скрытый графический элемент индикатора загрузки, ему добавляется классupload
, а подсказка о загрузке скрывается через удаление класса- loader _ visible upload
.- hint _ visible - Метод
open
выполняет POST-запрос к управляющему файлу, который хранится на сервере.( ) - Выбранный пользователем файл передаётся на сервер.
- Для
XML
выполняется обработка события загрузки файла:Http Request - если файл сохранён на сервере, индикатор загрузки скрывается и пользователю показывается сообщение об успешной загрузке файла;
- если файл не принят сервером, индикатор загрузки скрывается и пользователю показывается сообщение об ошибке.
dropZoneData.append('file', fileInstanceUpload)xhr.upload.addEventListener('progress', function() { hintText.classList.remove('upload-hint_visible') loaderImage.classList.add('upload-loader_visible')})xhr.open('POST', 'upload_processing.php', true)xhr.send(dropZoneData)xhr.onload = function (event){ if (xhr.status == 200) { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл «${fileInstanceUpload.name}» загружен успешно` } else { loaderImage.classList.remove('upload-loader_visible') outputText.textContent = `Файл не загружен. Ошибка ${xhr.status} при загрузке файла. ` }}
dropZoneData.append('file', fileInstanceUpload)
xhr.upload.addEventListener('progress', function() {
hintText.classList.remove('upload-hint_visible')
loaderImage.classList.add('upload-loader_visible')
})
xhr.open('POST', 'upload_processing.php', true)
xhr.send(dropZoneData)
xhr.onload = function (event){
if (xhr.status == 200) {
loaderImage.classList.remove('upload-loader_visible')
outputText.textContent = `Файл «${fileInstanceUpload.name}» загружен успешно`
} else {
loaderImage.classList.remove('upload-loader_visible')
outputText.textContent = `Файл не загружен. Ошибка ${xhr.status} при загрузке файла.`
}
}
Открыть демо в новой вкладкеБесплатный ES5 / ES6 JavaScript плагин для загрузки файлов — Uppy
Один из самых сложных входных данных для проектирования — это загрузка файла. У него есть стиль HTML по умолчанию, но это не самая красивая вещь в мире.
Uppy переводит загрузку файлов на совершенно новый уровень благодаря пользовательскому интерфейсу и динамическому процессу загрузки в стиле Ajax.
Он работает на коде ES5 / ES6, поэтому вы можете создавать свои веб-приложения с последними стандартами JavaScript. И он даже поддерживает загрузку файлов с сайтов облачного хранилища, таких как Dropbox или Google Drive, так что это многогранный скрипт загрузки файлов для Интернета.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Читайте также: Создание стильной адаптивной формы с CSS3 и HTML5
Uppy полностью бесплатный и с открытым исходным кодом, с репо на GitHub, Однако самый простой способ установить этот плагин — через npm или Yarn, так что вы можете запустить его как настоящий пакет.
Как только вы добавите файлы на свой веб-сайт, вы просто включите файл Uppy.js и код CSS. Затем вы выбираете любое поле ввода, а Uppy позаботится об остальном.
Он имеет уникальный интерфейс, который выглядит как одно большое квадратное размещение для перетаскивания файлов. Вы также можете выбирать элементы с жесткого диска или даже удаленно загружать файлы с внешних URL-адресов. Довольно сумасшедший!
Вы можете найти весь процесс установки на страница документации, но для этого требуется, по крайней мере, некоторое понимание ECMAScript 6. Эта библиотека смотрит в будущее сценариев и не самая простая вещь для использования с чистым ванильным JavaScript.
Но если вы серьезно относитесь к веб-разработке, то в любом случае стоит изучить ES6. Вы можете найти тонны ресурсов в Интернете для самообучения, и вы даже можете использовать Uppy как ваш первый «настоящий» проект, чтобы погрузиться и начать учиться.
Проверьте Пример панели инструментов увидеть Уппи в действии. Для этой страницы загрузка скрыта за триггерной кнопкой, где вы нажимаете кнопку, чтобы отобразить модальное поле загрузки.
Оттуда вы можете выбрать, хотите ли вы загрузить изображение со своего компьютера, из Интернета или даже с веб-камеры!
На странице «Примеры» можно просмотреть несколько групп, включая пример перетаскиваниявместе с интернациональной демонстрационной страницей.
Но, чтобы действительно узнать, как это работает, я рекомендую просмотреть документы и просмотреть основной репозиторий GitHub, Вы также можете поделиться своими мыслями с создателями в Twitter @transloadit,
Читайте также: 4 UX Design Form UX, которые вы должны знать (с примерами)
<script async src="https://triu.ru/wp-content/litespeed/localres/aHR0cHM6Ly9wbGF0Zm9ybS50d2l0dGVyLmNvbS93aWRnZXRzLmpz" charset="utf-8"></script>
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
404: Страница не найдена
Страница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы извиняемся за любые неудобства.
Что я могу сделать сейчас?
Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:
Поиск- Узнайте последние новости.
- Наша домашняя страница содержит самую свежую информацию о Java-разработке.
- Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, TheServerSide.com.
- Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.
Просмотр по категории
Архитектура приложения- 5 заслуживающих внимания проблем разработки программного обеспечения для автомобилей
Современные автомобили оснащены технологиями, но создание автомобильных приложений не всегда является легкой прогулкой. Вот пять уникальных …
- Новый сервис AWS нацелен на безопасность данных, появится функция genAI
Новая услуга облачного провайдера помогает сотрудникам организаций работать более продуктивно, обеспечивая при этом безопасность своей работы. Продавец …
- Разрушение краеугольных компонентов ООП
Объектно-ориентированное программирование изменило правила игры для тех, кто работает со сложными программными системами. Но каковы ключевые элементы, которые…
- Возможности ChatGPT для тестирования программного обеспечения
ChatGPT может помочь тестировщикам программного обеспечения писать тесты и планировать покрытие. Как команды могут предвидеть будущие возможности тестирования ИИ…
- Компании розничной торговли получают показатели DORA ROI благодаря специализированным инструментам
Показатели DORA и другие показатели инженерной эффективности появляются в надстройках к существующим инструментам DevOps. А вот сторонний…
- Вопросы и ответы на сертификационный экзамен Scrum master
Готовы ли вы к сертификационному экзамену Scrum master? Проверьте себя, ответив на эти 10 сложных вопросов и ответов на экзамене Scrum master.
- Разверните приложение с малой задержкой с помощью AWS Local Zones за 5 шагов
Как только вы решите, что локальные зоны AWS подходят для вашего приложения, пришло время для развертывания. Следуйте этому пошаговому видео…
- HPE делает большие ставки на общедоступное облако для ИИ
Компания HPE выходит на рынок общедоступных облачных сервисов с искусственным интеллектом, но готова ли она? Узнайте больше о предложениях ИИ для HPE GreenLake и …
- Усовершенствование HPE GreenLake, нацеленное на все
Брайан Томпсон из HPE рассказывает о том, как HPE GreenLake стала синонимом бренда, смотрит в будущее и о том, как …
- CISA: вредоносное ПО Truebot заражает сети в США и Канаде
CISA предупредила об атаках Truebot в совместном консультативном совещании с ФБР, Канадским центром кибербезопасности и Мультигосударственным …
- JumpCloud аннулирует ключи API в ответ на продолжающийся инцидент
Облачный провайдер не предоставил никаких подробностей об инциденте, который вызвал обязательную ротацию ключей API, что могло иметь . ..
- В июне произошел шквал атак программ-вымогателей на сектор образования.
В конце учебного года атаки программ-вымогателей прокатились по школам и университетам K-12, вызвав срывы занятий и …
- AWS Control Tower стремится упростить управление несколькими учетными записями
Многие организации изо всех сил пытаются управлять своей огромной коллекцией учетных записей AWS, но Control Tower может помочь. Сервис автоматизирует …
- Разбираем модель ценообразования Amazon EKS
В модели ценообразования Amazon EKS есть несколько важных переменных. Покопайтесь в цифрах, чтобы убедиться, что вы развернули службу…
- Сравните EKS и самоуправляемый Kubernetes на AWS
Пользователи
AWS сталкиваются с выбором при развертывании Kubernetes: запустить его самостоятельно на EC2 или позволить Amazon выполнить тяжелую работу с помощью EKS. См…
Простая загрузка файлов с помощью JavaScript
Загружайте что угодно и откуда угодно
Библиотека JavaScript , которая может загружать все, что вы в нее бросаете, оптимизирует изображения для более быстрой загрузки и предлагает великолепный, доступный, шелковисто-гладкий пользовательский интерфейс .
Адаптеры каркаса
Базовая библиотека написана на ванильном JavaScript и поэтому может использоваться везде.
Ниже вы можете найти список адаптеров, упрощающих использование FilePond с вашим любимым фреймворком.
- Реагировать
- Вью
- Стройный
- Угловой
- jQuery
Получайте уведомления о выпуске нового адаптера, подписавшись на информационный бюллетень.
Примеры реализации
Давайте рассмотрим два быстрых примера реализации и посмотрим, на что способен FilePond.
Загрузка нескольких файлов
- Демонстрация
- Код
Многофайловая демонстрация
- Добавьте атрибут
Multiple
к входному файлу, чтобы создать область размещения нескольких файлов. - Ограничьте максимальное количество файлов с помощью атрибута
data-max-files
. - Перетащите изображение, и FilePond выполнит быстрый предварительный просмотр. Это также исправит информацию об ориентации мобильной фотографии.
- Файлы можно переупорядочивать, возьмите файл и перетащите его в новое место.
- Редактирование изображений на платформе Pintura
Выбор изображения профиля
- Демо
- Код
Демонстрация изображения профиля
- Перетащенные изображения будут автоматически обрезаны до соотношения сторон 1:1 и масштабированы, чтобы соответствовать ограничивающей рамке 200 × 200.
- Если вы случайно перетащите изображение в окно браузера, FilePond предотвратит его открытие браузером.
- Редактирование изображений на платформе Pintura
Редактор изображений Pintura прекрасно интегрируется с FilePond и открывает перед пользователями идеальные возможности редактирования изображений.
- Пятиминутная установка
- Набор масок и направляющих
- Определить параметры соотношения сторон
- Поворот, изменение размера и отражение изображений
- Аннотирование, украшение и редактирование изображений
- Finetune Цвета изображения
- Применение эффектов фильтра
Обзор функций
Несколько форматов ввода
Принимает каталоги, файлы, большие двоичные объекты, локальные URL-адреса, удаленные URL-адреса и URI данных.
Несколько источников файлов
Удаление файлов, выбор файлов из файловой системы, добавление файлов с помощью API или копирование и вставка файлов.
Асинхронная или синхронная загрузка
Отправляйте файлы на сервер с помощью XMLHttpRequest или сохраняйте и отправляйте с сообщением формы в формате base64 с помощью подключаемого модуля File Encode.
Оптимизация изображения
Автоматическое изменение размера и обрезка изображений на клиенте экономит пропускную способность сервера и значительно увеличивает скорость загрузки.
Доступный
Протестировано с программным обеспечением AT, таким как VoiceOver и JAWS. Навигация по пользовательскому интерфейсу FilePond осуществляется с помощью клавиатуры.
Отзывчивый
Автоматически масштабируется до доступного места. Работает как на мобильных, так и на настольных устройствах.
Это еще не все…
- Перетаскивание для изменения порядка файлов
- Изменение меток и значков
- Режим нескольких или одного файла
- Фильтрация файлов из удаленных папок
- Восстановить временные файлы сервера
- Файлы перехвата упали на страницу
- Загружать при сбросе или ждать действий пользователя
- Ограничение высоты области сброса
- Удалить для замены текущего файла
- Копировать вставить файлы
- Добавить метаданные в файлы
- Расширение FilePond с помощью плагинов
- Ограничение размера входного файла
- Ограничить общий размер всех файлов
- Ограничьте типы файлов, которые можно добавить
- Показать предварительный просмотр файлов изображений
- Обрезать изображения до фиксированного соотношения
- Изменение размера изображений, чтобы они поместились в ограничительной рамке
- Принудительное изменение размера изображений до определенного размера
- Применить преобразования изображения на клиенте
- Сжатие изображений JPEG
- Преобразование изображений в JPEG или PNG
- Чтение информации об ориентации изображения EXIF
- Файлы кодирования Base64
FilePond постоянно совершенствуется
Ознакомьтесь с приведенной ниже дорожной картой, чтобы узнать, что будет в ближайшее время.
Дорожная карта
Core
- Представление в виде сетки
- Загрузка фрагмента
- Анимированные значки кнопок
- Различные макеты предметов
- Переменные CSS для цветов
Адаптеры
- Угловые
- Стройный
- Вью
- jQuery
- Реагировать
Плагины
- Редактор изображений
- Вращение и отражение изображения
- Водяные знаки изображения
- Маскирование изображения
Будьте в курсе новых выпусков дорожной карты, подписавшись на информационный бюллетень
О компании PQINA
Под управлением Рика Шеннинка PQINA помогает более 10 000 компаний по всему миру для достижения успеха.