Я использую createFile()
метод библиотеки SharepointPlus 5.2 js для загрузки файла в библиотеку SharePoint 2013. Он прекрасно работает на большинстве библиотек SP. Но во вновь созданных библиотеках SP он выдает ошибку (необходимо указать содержимое файла) при первом щелчке, а затем выполняет соответствующую загрузку при втором щелчке. Как решить эту проблему?
Раздел заголовка содержит:
<script type="text/javascript" src="/_layouts/15/MicrosoftAjax.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/init.js"></script>
<script type="text/javascript" src="/_layouts/15/core.js"></script>
<script type="text/javascript" src="/_layouts/15/1049/strings.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.ui.dialog.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/bootstrap.min.js"></script>
<script type="text/javascript" src="/SiteAssets/_js/sharepointplus-5.2.min.js"></script>
Тело HTML:
<div data-role="form" class="container form">
<div data-field="Title">
<label class="form_label required">Title:</label><br>
<input class="form_field required" value=""></input>
</div>
<div id="fileUploadControl" >
<label class="form_label required">Document selection:</label><br/>
<input id="fileUploadInput" class="form_field" type="file"/>
</div>
<hr>
<div class="btn_panel">
<input type="button" class="btn" id="save_btn" name="Save" value="Save" onclick="_uploadFile();">
<input type="button" class="btn" id="cancel_btn" name="Cancel" value="Cancel">
</div>
</div>
Функция JS:
function _uploadFile() {
var Title = $('div[data-field="Title"] input').val();
var files = document.querySelector('#fileUploadInput').files;
files = Array.prototype.slice.call(files);
// read the files
Promise.all(files.map(function(file) {
return new Promise(function(prom_res, prom_rej) {
// use fileReader
var fileReader = new FileReader();
fileReader.onloadend = function(e) {
file.content = e.target.result;
prom_res(file);
}
fileReader.onerror = function(e) {
prom_rej(e.target.error);
}
fileReader.readAsArrayBuffer(file);
});
})).then(function(files) {
// upload files
return Promise.all(files.map(function(file) {
return $SP().list("8D5132D2-A458-4961-BCD6-FFD9CE964C0F").createFile({ //Doc lib UID
content:file.content,
filename:file.name,
fields:{
"Title":Title
}
});
}))
}).then(function(file) {
alert(file[0].Name+" has been uploaded");
console.log("Document " + file[0].Name+" has been uploaded to the Outgoing documents library");
}, function(error) {
console.log("Error: ",error);
});
}
Ошибка в консоли Firefox:
необработанное исключение: [SharepointPlus 'createFile']: требуется содержимое файла.
Отладка содержимого объекта файла показывает, что онсуществует (показан размер в байтах). Обработчик ошибок не возвращает текстовое сообщение об ошибке. При втором нажатии на ту же форму (без обновления страницы) загружается файл и выдается сообщение об успехе. Я застрял, если это проблема SharePoint, JQuery или SharepointPlus, или какой-то конфликт. Обычно загрузка файла с первого клика ожидается, так как тот же код работает в других существующих библиотеках.