SharePoint. Drag-and-Drop Загрузчик файлов

В SharePoint существует нативный клиентский контрол, который позволяет загружать файлы в библиотеку документов с помощью drag'n'drop.

Поддерживаемые версии SharePoint

Этот функционал был выпущен вместе с SharePoint 2013 и с тех пор не менялся. Т.е. он работает во всех версиях SharePoint, начиная с 2013, в том числе и с SharePoint Online.

HTML

Для инициализации этого клиентского контрола необходимо предоставить HTML-элемент, который будет являться дроп зоной для документов.

Что-то вроде этого будет вполне достаточно:

<div id="dragzone">
    Перетащите свои файлы сюда.
</div>

В моём примере я добавил стили, чтобы сделать эту зону крупнее и с границей:

<style>
#dragzone{
    width: 100%;
    height: 400px;
    border: 1px solid #dedede;
}
</style>

Настройка

Клиентский контрол имеет следующие параметры:

  • dropTargetElement - HTML элемент, о котором сказано выше;
  • serverUrl - URL-адрес сервера, можно передать просто "/" (но не всегда);
  • siteRelativeUrl - URL-адрес коллекции сайтов относительно сервера. это значение можно получить из свойства _spPageContextInfo.siteServerRelativeUrl;
  • listName - ID библиотеки документов. Именно Guid, а не название;
  • rootFolder - путь к папке, в которую необходимо загрузить файлы. Если значение равно "", то файлы будут загружены в корневую папку библиотеки;
  • overwriteAll - Если true - файлы будут перезаписаны, если таковые уже имеются;
  • hideProgressBar - Если true - индикатор загрузки будет скрыт;
  • refreshFunction - JavaScript функция для обработки изменения состояния загрузчика;
  • preUploadFunction - функция, вызываемая перед началом загрузки;
  • postUploadFunction - функция, вызываемая после окончания загрузки;
  • checkPermissionFunction - функция, вызываемая перед вызовом функции preUploadFunction;

checkPermissionFunction

Эта функция используется для валидации перед загрузкой. Если она определена и НЕ возвращает true - загрузка не будет инициализирована. Если валидация не нужна - просто не указывайте этот параметр.

Обработчики событий

Все остальные функции (refreshFunction, preUploadFunction, postUploadFunction) принимают единственный аргумент типа FileElement[].

Класс FileElement:

FileElement.prototype = {
        fileName: undefined,
        fileSize: undefined,
        type: undefined,
        droppedFile: undefined,
        overwrite: undefined,
        status: undefined,
        statusText: undefined,
        subFolder: undefined,
        relativeFolder: undefined,
        isFolder: undefined,
        existsOnServer: undefined,
        bytesUploaded: undefined
    };

Свойство status может быть равно одному из следующих значений:

  • -1 - INVALID
  • 0 - PENDING
  • 1 - SKIP
  • 2 - READING
  • 3 - READ
  • 4 - UPLOADING
  • 5 - UPLOADED
  • 6 - FAILED
  • 7 - WARNING

Подготовка

Клиентский drag'n'drop загрузчик определен в файле DragDrop.js, расположенном в SharePoint Hive. Для его использования необходимо загрузить этот js-файл:

SP.SOD.loadMultiple(['sp.js'], function () {
  SP.SOD.registerSod('DragDrop.js', SP.Utilities.Utility.getLayoutsPageUrl('DragDropy.js'));
    SP.SOD.loadMultiple(['DragDrop.js'], function () {
    // DragDrop.js загружен
  });
});

Всё готово. Осталось только вызвать метод registerDragUpload и передать в него параметры.

JavaScript

Следующий JavaScript код инициализирует загрузчик:

// drag-zone
var element = document.getElementById("dragzone");

// Адрес сервера
var serverUrl = "https://corp.portal";

// Относительный адрес коллекции сайтов. Удаляем лидирующий слеш
var siteRelativeUrl = _spPageContextInfo.siteServerRelativeUrl.substring(1);

// Идентифиикатор библиотеки документов
var listName = "ec706501-47ba-4276-92a1-a62024ba5405"

// загружаем файлы в корневую папку
var rootFolder = "";

// заменяем файлы, если они уже есть
var overwriteAll = true;

// отображаем индикатор загрузки
var hideProgressBar = false;

// refreshFunction, preUploadFunction, postUploadFunction
var changeStateHandler = function(fileElements){
    console.log(fileElements);
}

// проверяем права
var checkPermissionFunction = function(){
    return true;
}

var res = registerDragUpload(element, serverUrl, siteRelativeUrl, 
    listName, rootFolder, overwriteAll, hideProgressBar, 
    changeStateHandler, changeStateHandler, changeStateHandler, 
    checkPermissionFunction);

if(res == false){
    // Что-то пошло не так. Клиентский контрол не был инициализирован
}
else{
    // Контрол инициализирован
}

Результат

Для тестирования Вы можетедобавить следующий сниппет на страницу SharePoint on-premise/online:

<div id="dragzone">
    Перетащите свои файлы сюда.
</div>
<style>
    #dragzone {
        width: 100%;
        height: 400px;
        border: 1px solid #dedede;
    }
</style>
<script>
SP.SOD.loadMultiple(['sp.js'], function () {
    SP.SOD.registerSod('DragDrop.js', SP.Utilities.Utility.getLayoutsPageUrl('DragDropy.js'));
    SP.SOD.loadMultiple(['DragDrop.js'], function () {
        var element = document.getElementById("dragzone");

        // Укажите адрес сервера
        var serverUrl = "https://corp.portal";

        var siteRelativeUrl = _spPageContextInfo.siteServerRelativeUrl.substring(1);

        // Укажите ИД библиотеки документов
        var listName = "ec706501-47ba-4276-92a1-a62024ba5405"

        var rootFolder = "";
        var overwriteAll = true;
        var hideProgressBar = false;
        var changeStateHandler = function (fileElements) {
            console.log(fileElements);
        }
        var checkPermissionFunction = function () {
            return true;
        }
        var res = registerDragUpload(element, serverUrl, siteRelativeUrl,
            listName, rootFolder, overwriteAll, hideProgressBar,
            changeStateHandler, changeStateHandler, changeStateHandler,
            checkPermissionFunction);
    });
  });
</script>

И результат:

Drag-and-Drop загрузчик SharePoint

Drag-and-Drop загрузчик SharePoint
Виталий Жуков

Виталий Жуков

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.

Смотрите также

Развертывание списков и библиотек с помощью SPFx-решений

Развертывание списков и библиотек с помощью SPFx-решений

CSOM. Загрузка файлов

CSOM. Загрузка файлов

SharePoint List REST API. Часть 2

SharePoint List REST API. Часть 2

SharePoint Framework. Создание веб-части на Angular

SharePoint Framework. Создание веб-части на Angular

SharePoint List REST API. Часть 1

SharePoint List REST API. Часть 1

Презентация с доклада о SharePoint Framework

Презентация с доклада о SharePoint Framework

SharePoint Framework. Создаем AngularJS 1.x Client WebPart

SharePoint Framework. Создаем AngularJS 1.x Client WebPart

SharePoint. Регистрация CSS и JavaScript с помощью DelegateControl

SharePoint. Регистрация CSS и JavaScript с помощью DelegateControl

SharePoint. Расширяем REST API

SharePoint. Расширяем REST API

SharePoint Excel Services. Создаем кредитный калькулятор

SharePoint Excel Services. Создаем кредитный калькулятор

SharePoint Ribbon API. Использование ToggleButton

SharePoint Ribbon API. Использование ToggleButton

SharePoint 2013. How To: настройка входящей почты для разработчиков

SharePoint 2013. How To: настройка входящей почты для разработчиков

Мифы и правда о Linq to SharePoint

Мифы и правда о Linq to SharePoint

5 особенностей SPSiteDataQuery

5 особенностей SPSiteDataQuery

SharePoint 2013. Введение в SharePoint App. Часть 2

SharePoint 2013. Введение в SharePoint App. Часть 2

SharePoint 2013. Введение в SharePoint App. Часть 1

SharePoint 2013. Введение в SharePoint App. Часть 1

Превью для веб-части в SharePoint 2010/2013

Превью для веб-части в SharePoint 2010/2013

SharePoint 2013. Еще немного о новых контролах

SharePoint 2013. Еще немного о новых контролах

SharePoint 2013. Контрол ClientPeoplePicker

SharePoint 2013. Контрол ClientPeoplePicker

SharePoint 2013. Контрол ImageCrop

SharePoint 2013. Контрол ImageCrop

SharePoint 2013. Тип поля Geolocation

SharePoint 2013. Тип поля Geolocation

Создание типа поля в SharePoint

Создание типа поля в SharePoint

SharePoint 2010. Длительные операции с обновляемым статусом

SharePoint 2010. Длительные операции с обновляемым статусом

Linq to SharePoint. Создаем ContentIterator

Linq to SharePoint. Создаем ContentIterator

Linq to SharePoint. Получение данных из другой коллекции сайтов

Linq to SharePoint. Получение данных из другой коллекции сайтов

Linq to SharePoint. Версионность

Linq to SharePoint. Версионность

SharePoint. Получение URL-адреса иконки для документа

SharePoint. Получение URL-адреса иконки для документа

SharePoint 2010. PostBack для Fluent Ribbon API

SharePoint 2010. PostBack для Fluent Ribbon API

Linq to SharePoint. Блокировка документов

Linq to SharePoint. Блокировка документов

Linq to SharePoint. Паттерн Repository

Linq to SharePoint. Паттерн Repository

Linq to SharePoint. Получение мета-данных списка

Linq to SharePoint. Получение мета-данных списка

Linq to SharePoint. Мапинг полей

Linq to SharePoint. Мапинг полей

Linq to SharePoint. Формирование данных для ProcessBatchData

Linq to SharePoint. Формирование данных для ProcessBatchData

Linq to SharePoint. Сравнение производительности с Camlex.NET

Linq to SharePoint. Сравнение производительности с Camlex.NET

Linq to SharePoint. Часть 5. Поля Choice и MultiChoice

Linq to SharePoint. Часть 5. Поля Choice и MultiChoice

Linq to SharePoint. Часть 4. Dynamic LINQ

Linq to SharePoint. Часть 4. Dynamic LINQ

Linq to SharePoint. Особенности. Часть 3

Linq to SharePoint. Особенности. Часть 3

Linq to SharePoint. Особенности. Часть 2

Linq to SharePoint. Особенности. Часть 2

SharePoint 2010. PeopleEditor. Установка значения

SharePoint 2010. PeopleEditor. Установка значения

SharePoint 2010. Настройка входящей почты для кастомного списка

SharePoint 2010. Настройка входящей почты для кастомного списка

Linq to Sharepoint. Особенности

Linq to Sharepoint. Особенности

EntityFramework. Оптимистические блокировки

EntityFramework. Оптимистические блокировки