在SharePoint中的以下代码中上载文档库中的多个附件时遇到问题。 [英] Getting issue in Uploading Multiple attachments in document library in below code in SharePoint online.
问题描述
我在表单中使用两个控件来上传多个文档,即一个命名为主文档,另一个命名为辅助文档。两个控件都在库中上传多个附件。
问题 - 有些文件是上传的,有些文件没有上传。
这是我的下面的代码。
                                                var controle1 =" N"; $
var controle2 =" N"; $
function onSuccess(){
  ; //提醒("成功");
 提醒('商品已创建:' + newItem.get_id());
  var ItemID = newItem.get_id();
  var elementId1 = $(&#; PERSONAL0id")。val();
  var elementId2 = $(&#; PERSONAL1id")。val();
  if(elementId1!="")
  {
  controle1 =" Y";
  }¥b $ b   if(elementId2!="")
  {
  controle2 =" Y";
  }¥b $ b   if(controle1 ==" Y")
  {
  var Control =" P";
  uploadMFBySearch(ItemID,Control);
  }¥b $ b   if(controle2 ==" Y")
  {
  var Control =" S";
  uploadMFBySearch(ItemID,Control);
  }¥b $ b  提醒("项目已更新");
$
}
函数uploadMFBySearch(ItemID,Control) {
调试器;
// alert(ItemID);
  var serverRelativeUrlToFolder ='docLibrary /';
  var fileInput = jQuery('#PERSONAL'+ Control +'id');
  var newName =" mulDoc";
  var docType =" muldocument";
  var filerename =" muldocument";              
  var fileCount = fileInput [0] .files.length;
  var serverUrl = _spPageContextInfo.webAbsoluteUrl;
  var filesUploaded = 0;
&NBSP; for(var i = 0; i< fileCount; i ++){//使用jQuery promises启动方法调用。 //将本地文件作为数组缓冲区。
&NBSP; &NBSP; &NBSP; var getFile = getFileBufferMF(i);
&NBSP; &NBSP; &NBSP; &NBSP; getFile.done(功能(arrayBuffer,I){//将文件添加到SharePoint夹
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; VAR addFile = addFileToFolderMF(arrayBuffer, i);
$
addFile.done(function(file,status,xhr){//获取上传文件的ID // mFclear(); <登记/>
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; VAR getfileID =的getItem(file.d.ListItemAllFields .__ deferred.uri); // VAR getfileID =的getItem(file.d) ; //getListItem(file.d.ListItemAllFields.__deferred.uri);//getItem(file.d);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; getfileID .done(function(fResult){
var colObjectMF = new Object();
colObjectMF [" DocumentCategory"] =" yo" ;; // var changeItem = updateFileMetadataMF(libraryName,fResult.d,colObject) ;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var changeItem = updateFileMetadataMF(fResult.d .__ metadata,docType,newName,filerename,i,fileInput,ItemID,Control);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; changeItem.done(功能(结果){
filesUploaded ++;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //警报(QUOT; H1");
&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;若(fileCount == filesUploaded){
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; //警报("成功上传的所有文件");
&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; filesUploaded = 0;
// ClearPersonalMF(Control) ;
$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; });
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; changeItem.fail(功能(结果){
$
});
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; },function(){});
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; });
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; addFile.fail(onErrorMF);
&NBSP; &NBSP; &NBSP; });
&NBSP; &NBSP; &NBSP; getFile.fail(onErrorMF);
&NBSP; }
//此函数将返回已上传项目的ID。
function getItem(fileListItemUri){
&NBSP; &NBSP; &NBSP;返回jQuery.ajax({
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;网址:fileListItemUri,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;输入:" GET",
headers:{" accept":" application / json; odata = verbose"}
});
&NBSP; &NBSP; }
$
&NBSP; function getFileBufferMF(i){//将本地文件作为数组缓冲区。
&NBSP; &NBSP; &NBSP; var deferred = jQuery.Deferred();
&NBSP; &NBSP; &NBSP; var reader = new FileReader();
&NBSP; &NBSP; &NBSP; reader.onloadend = function(e){deferred.resolve(e.target.result,i);}
&NBSP; &NBSP; &NBSP; reader.onerror = function(e){deferred.reject(e.target.error);}
&NBSP; &NBSP; &NBSP; reader.readAsArrayBuffer(fileInput [0] .files [i]);
&NBSP; &NBSP; &NBSP; return deferred.promise();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; function addFileToFolderMF(arrayBuffer,i){//将文件添加到共享文档文件夹中的文件集合。
&NBSP; &NBSP; &NBSP; var index = i;
&NBSP; &NBSP; &NBSP; fileNameMF1 = fileInput [0] .files [index] .name;
&NBSP; &NBSP; &NBSP; //fileNameMF.push(fileInput[0].files[index].name);//从页面上的文件输入控件中获取文件名。 &NBSP; &NBSP; //构建端点。
&NBSP; &NBSP; &NBSP; var fileCollectionEndpoint = String.format(" {0} / _ api / web / getfolderbyserverrelativeurl('{1}')/ files / add(overwrite = true,url ='{2}')",serverUrl,serverRelativeUrlToFolder,fileNameMF1 ); $
&NBSP; &NBSP; //发送请求并返回响应。此调用返回SharePoint文件。
&NBSP; &NBSP; &NBSP;返回jQuery.ajax({
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;网址:fileCollectionEndpoint,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;键入:" POST",
data:arrayBuffer,
  ; // async:false,
processData:false,
  ;标题:{
" accept":" application / json; odata = verbose",
" X-RequestDigest":jQuery(" #__ REQUESTDIGEST")。val(),
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"内容长度" ;: arrayBuffer.byteLength
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}
});
$
&NBSP; }
}
$
//显示错误消息。
函数onErrorMF(错误){
&NBSP; console.log(" mf:" + error.responseText);
&NBSP; //ale(" mf:" + error.responseText);
}
函数updateFileMetadataMF(item,docType,newName, filerename,i,fileInput,ItemID,Control){
&NBSP; // var dt = new Date;
// var f1 = filerename +" _" + fileInput [0] .files [i] .name.split('。')[0] +" _" + dt.format(" dd_MMM_yyyy") ;
&NBSP; &NBSP; &NBSP; var body = String.format(" {{'__ metadata':{{'type':'{0}'}},'Title':'{1}','DocumentType':'{2}'}} ",item.type,ItemID,Control);
&NBSP; &NBSP; &NBSP; return jQuery.ajax({
url:item.uri,
键入:" POST",
// async:false,
  ; 数据:正文,
标题:{
" X-RequestDigest":jQuery(" #__ REQUESTDIGEST")。val(),
"内容类型" ;:"应用/ JSON;的OData =冗长" ;,
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;"内容长度" ;:体。长度,
" IF-MATCH":item.etag,
" X-HTTP-Method":" MERGE"
  ; }¥b $ b &NBSP; &NBSP; &NBSP; });
&NBSP; &NBSP; &NBSP; return dfd.promise();
&NBSP; }
Shiv Sharma
你可以试试下面的脚本上传多个附着物列出,你只需要更新uploadFileSP逻辑在addFileToFolderMF
<预类=" prettyprint"><脚本类型= QUOT;文本/ JavaScript的" SRC =" HTTPS://code.jquery.com/jquery-1.12.4.js">< /脚本>
< script type =" text / javascript" SRC =" /SiteAssets/angular/angular.min.js">< /脚本>
< script type =" text / javascript">
var app = angular.module('myApp',[]);
app.controller('MainCtrl',函数(
范围){
scope.name ='UploadAttachements' ;
I am using two control in form for Uploading multiple document i.e one named as primary documents and another named as secondary document. Both control are uploading multiple attachments in library.
Issue- Some files are upload, some are not Uploading.
this is my below code.
var controle2="N";
function onSuccess(){
// alert("in sucess");
alert('Item created: ' + newItem.get_id());
var ItemID=newItem.get_id();
var elementId1=$("#PERSONAL0id").val();
var elementId2=$("#PERSONAL1id").val();
if(elementId1!="")
{
controle1="Y";
}
if(elementId2!="")
{
controle2="Y";
}
if(controle1=="Y")
{
var Control="P";
uploadMFBySearch(ItemID,Control);
}
if(controle2=="Y")
{
var Control="S";
uploadMFBySearch(ItemID,Control);
}
alert("Item Updated");
}
function uploadMFBySearch(ItemID,Control) {
debugger;
//alert(ItemID);
var serverRelativeUrlToFolder = 'docLibrary/';
var fileInput = jQuery('#PERSONAL'+Control+'id');
var newName ="mulDoc";
var docType="muldocument";
var filerename="muldocument";
var fileCount = fileInput[0].files.length;
var serverUrl = _spPageContextInfo.webAbsoluteUrl;
var filesUploaded = 0;
for (var i = 0; i < fileCount; i++) {// Initiate method calls using jQuery promises. // Get the local file as an array buffer.
var getFile = getFileBufferMF(i);
getFile.done(function (arrayBuffer, i) { // Add the file to the SharePoint folder.
var addFile = addFileToFolderMF(arrayBuffer, i);
addFile.done(function (file, status, xhr) {//Get ID of File uploaded //mFclear();
var getfileID =getItem(file.d.ListItemAllFields.__deferred.uri);//var getfileID =getItem(file.d); //getListItem(file.d.ListItemAllFields.__deferred.uri);//getItem(file.d);
getfileID.done(function (fResult) {
var colObjectMF = new Object();
colObjectMF["DocumentCategory"] = "yo";//var changeItem = updateFileMetadataMF(libraryName, fResult.d, colObject);
var changeItem = updateFileMetadataMF(fResult.d.__metadata,docType,newName,filerename,i,fileInput,ItemID,Control);
changeItem.done(function (result) {
filesUploaded++;
//alert("HI");
if (fileCount == filesUploaded) {
//alert("All files uploaded successfully");
filesUploaded = 0;
//ClearPersonalMF(Control);
}
});
changeItem.fail(function (result) {
});
}, function () { });
});
addFile.fail(onErrorMF);
});
getFile.fail(onErrorMF);
}
//This function will return the id of item uploaded.
function getItem(fileListItemUri) {
return jQuery.ajax({
url: fileListItemUri,
type: "GET",
headers: { "accept": "application/json;odata=verbose" }
});
}
function getFileBufferMF(i) {// Get the local file as an array buffer.
var deferred = jQuery.Deferred();
var reader = new FileReader();
reader.onloadend = function (e) {deferred.resolve(e.target.result, i);}
reader.onerror = function (e) {deferred.reject(e.target.error);}
reader.readAsArrayBuffer(fileInput[0].files[i]);
return deferred.promise();
}
function addFileToFolderMF(arrayBuffer, i) { // Add the file to the file collection in the Shared Documents folder.
var index = i;
fileNameMF1 = fileInput[0].files[index].name;
//fileNameMF.push(fileInput[0].files[index].name);// Get the file name from the file input control on the page. // Construct the endpoint.
var fileCollectionEndpoint = String.format("{0}/_api/web/getfolderbyserverrelativeurl('{1}')/files/add(overwrite=true, url='{2}')",serverUrl, serverRelativeUrlToFolder, fileNameMF1);
// Send the request and return the response.// This call returns the SharePoint file.
return jQuery.ajax({
url: fileCollectionEndpoint,
type: "POST",
data: arrayBuffer,
//async:false,
processData: false,
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
"content-length": arrayBuffer.byteLength
}
});
}
}
// Display error messages.
function onErrorMF(error) {
console.log("mf:"+error.responseText);
//alert("mf:"+error.responseText);
}
function updateFileMetadataMF(item,docType,newName,filerename,i,fileInput,ItemID,Control) {
//var dt = new Date;
// var f1=filerename+"_"+fileInput[0].files[i].name.split('.')[0]+"_"+dt.format("dd_MMM_yyyy");
var body = String.format("{{'__metadata':{{'type':'{0}'}},'Title':'{1}','DocumentType':'{2}'}}",item.type,ItemID,Control);
return jQuery.ajax({
url: item.uri,
type: "POST",
//async:false,
data: body,
headers: {
"X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
"content-type": "application/json;odata=verbose",
"content-length": body.length,
"IF-MATCH": item.etag,
"X-HTTP-Method": "MERGE"
}
});
return dfd.promise();
}
Shiv Sharma
Hi,
You could try below script which upload multiple attachements to list, you just need update the uploadFileSP logic to your addFileToFolderMF.
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script> <script type="text/javascript" src="/SiteAssets/angular/angular.min.js"></script> <script type="text/javascript"> var app = angular.module('myApp', []); app.controller('MainCtrl', function (
scope) {
scope.name = 'UploadAttachements';
这篇关于在SharePoint中的以下代码中上载文档库中的多个附件时遇到问题。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!