【问题标题】:SharePoint 2013 online can I set other column values when uploading a file using REST?SharePoint 2013 online 可以在使用 REST 上传文件时设置其他列值吗?
【发布时间】:2017-12-23 19:49:15
【问题描述】:

当我尝试在线将文件上传到 SharePoint 2013 时,以下 Javascript 可以完美运行。但是,我一直在寻找一种在上传文件的同时填充文档库中另一列的方法,但没有成功。例如,名称为“doctype”的单行文本列。我尝试的一切似乎都与我的代码不兼容。有可能吗?

这是我的代码:

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();
} 

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: javascript sharepoint sharepoint-online csom sharepoint-object-model


    【解决方案1】:

    baywet 是正确的,您的上传方法也很好。或者,我喜欢直接使用 CSOM。您可以使用FileCreationInformation 上传附件

    使用 CheckIn / Check Out 更新库项目元数据示例:

    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();
        }
    }
    

    【讨论】:

      【解决方案2】:

      基本上你需要查询使用文件创建的列表项,并更新它的元数据。这将需要多个 REST 查询。
      这是一个detailed article,告诉你如何做到这一点。

      【讨论】:

        猜你喜欢
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多