0

以下のJavascriptは、SharePoint 2013オンラインにファイルをアップロードしようとしているときに完全に機能します。しかし私は、ファイルがアップロードされるのと同時にドキュメントライブラリ内の別の列にデータを挿入する方法がうまくいかなかったと考えています。たとえば、 "doctype"という名前のテキスト行の1行です。私が試したことはすべて自分のコードと互換性がないように見えます。まったく可能ですか?SharePoint 2013オンラインRESTを使用してファイルをアップロードするときに、他の列の値を設定できますか?

はここに私のコードです:

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でこれを行うのが好きです。

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(); 
    } 
} 
:あなたは、添付ファイルにチェックイン/チェックアウトと

例ライブラリアイテムのメタデータの更新をアップロードするFileCreationInformationを使用することができます

0

基本的に、ファイルで作成されたリストアイテムをクエリし、そのメタデータを更新する必要があります。複数のRESTクエリが必要になります。
これを行う方法については、detailed articleです。

関連する問題