0

當我嘗試將文件上傳到SharePoint 2013在線時,下面的Javascript完美工作。然而,我一直在尋找一種方式來填充文檔庫中的另一列,同時我的文件被上傳。例如,名稱爲「doctype」的單行文本列。我所嘗試的所有東西都不符合我的代碼。它有可能嗎?使用REST上傳文件時,我可以在SharePoint 2013中設置其他列值嗎?

這裏是我的代碼:

jQuery(document).ready(function() { 
$(".uploadFile").click(function() { 
    fileID = $('#fileInput').attr('id'); 
    var selectedDocCat = $('#ddlCategory').val(); 
    var selectedDocType = $('#ddlType').val(); 
    document.getElementById("displayName").value = mainFolderUrlVal + "-" + 
selectedDocCat + '-' + selectedDocType; 
    fileName = $('#displayName').val(); 
    var fileUploading = document.getElementById('fileInput'); 
    if (fileUploading.files.length === 0) { 
     alert("Select a file and specify a filename!"); 
     return; 
    } 
    var parts = fileUploading.value.split("\\"); 
    var filename = parts[parts.length - 1]; 
    docTitle = parts[parts.length - 1]; 
    var fileExt = filename.split('.').pop(); 
    var file = fileUploading.files[0]; 
    newFileName = fileName + "." + fileExt; 
    console.log('filename is: ' + filename); 
    docCat = selectedDocCat; 
    uploadItems(docCat); 
}); 
}); 

function uploadItems(docUplCat) { 
var getArrayBuffer = getFileBuffer(); 
getArrayBuffer.done(function (arrayBuffer) { 
    var serverRelativeUrlToFolder = 'Files/' + mainFolderUrlVal + "/" + 
docUplCat; 
    var siteUrl = _spPageContextInfo.webAbsoluteUrl; 
    var docLibraryEndpoint = siteUrl + 
"/_api/web/getfolderbyserverrelativeurl('" + serverRelativeUrlToFolder + 
"')/files/add(overwrite=true,url='" + newFileName + "')"; 
    $.ajax({ 
     url: docLibraryEndpoint, 
     type: "POST", 
     binaryStringRequestBody: true, 
     data: arrayBuffer, 
     timeout: 1000000, 
     processData: false, 
     state: "Update", 
     headers: { 
      "Content-Type": "application/octet-stream", 
      "accept": "application/json;odata=verbose", 
      "X-RequestDigest": jQuery("#__REQUESTDIGEST").val() 
     }, 
     success: function (file) { 
      alert("File uploaded succesfully"); 
      window.frameElement.cancelPopUp(); return false; 
     }, 
     error: function (data) { 
      alert('Error: File did not upload Successfully'); 
     } 
    }); 
}); 
} 
function _arrayBufferToBase64(buffer) { 
var binary = '' 
var bytes = new Uint8Array(buffer) 
var len = bytes.byteLength; 
for (var i = 0; i < len; i++) { 
    binary += String.fromCharCode(bytes[i]) 
} 
return binary; 
} 
function getFileBuffer() { 
var deferred = jQuery.Deferred(); 
var reader = new FileReader(); 
reader.onloadend = function (e) { 
    deferred.resolve(e.target.result); 
} 
reader.onerror = function (e) { 
    deferred.reject(e.target.error); 
} 
reader.readAsArrayBuffer($('#fileInput')[0].files[0]); 
console.log('done: ' + reader); 
return deferred.promise(); 
} 

任何幫助將不勝感激,謝謝!

回答

0

baywet是正確的,並且您的上傳方法很好。或者,我喜歡用直接的CSOM來做到這一點。您可以使用FileCreationInformation上傳附件

實例庫項目的元數據更新簽入/簽出:

using(ClientContext ctx = new ClientContext(siteUrl)) { 
    SecureString passWord = new SecureString(); 
    foreach(char c in password) 
    passWord.AppendChar(c); 
    ctx.Credentials = new SharePointOnlineCredentials(username, passWord); 

    Web web = ctx.Web; 
    List list = web.Lists.GetByTitle(listName); 
    var query = CamlQuery.CreateAllItemsQuery(); 
    var items = list.GetItems(query); 
    ctx.Load(items); 
    ctx.ExecuteQuery(); 

    foreach(var item in items) { 
     item.File.CheckOut(); 
     item["Category"] = "My New Category"; 
     item["Title"] = "My New Title"; 
     item.Update(); 
     item.File.CheckIn("Updating Category and Title for list item", CheckinType.OverwriteCheckIn); 
     ctx.ExecuteQuery(); 
    } 
} 
0

基本上你需要查詢使用該文件創建的列表項,並更新它的元數據。它將需要多個REST查詢。
這是關於如何做到這一點的detailed article

相關問題