使用 JQuery 和 SharePointPlus js 库仅从第二次单击上传到 SharePoint 库的文件
File uploaded to SharePoint library using JQuery and SharePointPlus js lib only from second click
我正在使用 SharepointPlus 5.2 js 库的 createFile()
方法将文件上传到 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 控制台中的错误是
uncaught exception: [SharepointPlus 'createFile']: the file content
is required.
调试文件对象内容显示它存在(显示字节大小)。错误处理程序不会 return 错误文本消息。第二次点击相同的表格(没有页面刷新)上传文件并给出成功消息。
我被卡住了,如果它是 SharePoint、JQuery 或 SharepointPlus 问题,或者某些冲突。通常,第一次点击会上传文件,因为相同的代码适用于其他现有库。
问题已解决。实际上问题不在代码中,它工作正常,但在页面本身中。尽管我包含了所有 SP 依赖项,但代码仅在我将其放入 SP 本机页面时才有效。
我正在使用 SharepointPlus 5.2 js 库的 createFile()
方法将文件上传到 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 控制台中的错误是
uncaught exception: [SharepointPlus 'createFile']: the file content is required.
调试文件对象内容显示它存在(显示字节大小)。错误处理程序不会 return 错误文本消息。第二次点击相同的表格(没有页面刷新)上传文件并给出成功消息。 我被卡住了,如果它是 SharePoint、JQuery 或 SharepointPlus 问题,或者某些冲突。通常,第一次点击会上传文件,因为相同的代码适用于其他现有库。
问题已解决。实际上问题不在代码中,它工作正常,但在页面本身中。尽管我包含了所有 SP 依赖项,但代码仅在我将其放入 SP 本机页面时才有效。