Загрузка BLOB / ArrayBuffer с Dropzone.js
Используя SharePoint 2013 REST API, я успешно загружаю файлы, такие как.docx
или же.png
в папку внутри библиотеки документов, используя Dropzone.js. У меня есть функция, где я инициализирую свою зону сброса следующим образом:
myDropzone = new Dropzone("#dropzone");
myDropzone.on("complete", function (file) {
myDropzone.removeFile(file);
});
myDropzone.options.autoProcessQueue = false;
myDropzone.on("addedfile", function (file) {
$('.dz-message').hide();
myDropzone.options.url = String.format(
"{0}/{1}/_api/web/getfolderbyserverrelativeurl('{2}')/files" +
"/add(overwrite=true, url='{3}')",
_spPageContextInfo.siteAbsoluteUrl, _spPageContextInfo.webServerRelativeUrl, folder.d.ServerRelativeUrl, file.name);
});
myDropzone.options.previewTemplate = $('#preview-template').html();
myDropzone.on('sending', function (file, xhr, fd) {
xhr.setRequestHeader('X-RequestDigest', $('#__REQUESTDIGEST').val());
});
Проблема, с которой я столкнулся, состоит в том, что почти все файлы (PDF, единственный, которого нет) отображаются как поврежденные файлы, когда загрузка завершена. Это, скорее всего, связано с тем, что SharePoint требует, чтобы загружаемый файл отправлялся какArrayBuffer. MSDN Source
Используя обычный Ajax POST и описанный выше метод для преобразования файла в буфер массива, я успешно загрузил содержимое в библиотеку документов SharePoint, не повредив их. Теперь я хотел бы сделать то же самое, но не исключать использование Dropzone.js, который добавляет очень приятный штрих в интерфейс функциональности.
Я смотрел на изменениеuploadFiles()
-метод вdropzone.js
, но это кажется решительным. Я также пытался выяснить, могу ли я использоватьaccept
вариант вoptions
но это похоже на тупик.
Две наиболее похожие проблемы с решениями - это те, которые связаны ниже, где первая, кажется, применима в моем случае, но в то же время выглядит менее «чистой», чем я хотел бы использовать.
Второй - для загрузки изображений сBase64
кодирование.
1 - Имитация XHR для получения ArrayBuffer
2 - Загрузить изображение как Base64 с Dropzone.js
Итак, мой вопрос в нескольких словах, когда при добавлении файла, как мне перехватить это, преобразовать данные в буфер массива, а затем отправить его с помощью Dropzone.js?