REST上载到SharePoint 2013联机文档库后获取项ID

时间:2013-09-06 16:23:46

标签: jquery json rest sharepoint-2013 office365-apps

有人可以帮助我连接这些功能之间的点。我可以上传,但是如何获取我刚上传的文件的ID以更新主机文档库中文件的元数据列?

非常感谢!

function uploadDocument(buffer, fileName) {
    var url = String.format("{0}/_api/Web/Lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='{1}', overwrite=true)",
        _spPageContextInfo.webAbsoluteUrl, fileName);

    var call = jQuery.ajax({
        url: url,
        type: "POST",
        data: buffer,
        processData: false,
        headers: {
            Accept: "application/json;odata=verbose",
            "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
            "Content-Length": buffer.byteLength
        }
    });

    return call;
}

function getItem(file) {
    var call = jQuery.ajax({
        url: file.ListItemAllFields.__deferred.uri,
        type: "GET",
        dataType: "json",
        headers: {
            Accept: "application/json;odata=verbose"
        }
    });

    return call;
}

function updateItemFields(item) {
    var now = new Date();
    var call = jQuery.ajax({
        url: _spPageContextInfo.webAbsoluteUrl +
            "/_api/Web/Lists/getByTitle('Project Documents')/Items(" +
            item.Id + ")",
        type: "POST",
        data: JSON.stringify({
            "__metadata": { type: "SP.Data.Project_x0020_DocumentsItem" },
            CoordinatorId: _spPageContextInfo.userId,
            Year: now.getFullYear()
        }),
        headers: {
            Accept: "application/json;odata=verbose",
            "Content-Type": "application/json;odata=verbose",
            "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
            "IF-MATCH": item.__metadata.etag,
            "X-Http-Method": "MERGE"
        }
    });

    return call;
}

1 个答案:

答案 0 :(得分:6)

将“?$ expand = ListItemAllFields”添加到uploadDocument函数的url中。 所以

var url = String.format("{0}/_api/Web/Lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='{1}', overwrite=true)", _spPageContextInfo.webAbsoluteUrl, fileName);

将成为

var url = String.format("{0}/_api/Web/Lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='{1}', overwrite=true)?$expand=ListItemAllFields", _spPageContextInfo.webAbsoluteUrl, fileName);

在返回的ajax调用的success / complete函数中,您现在应该可以访问与新创建的文件关联的listItem的字段。以下是一个例子。

$(document).ready(function () {
    uploadDocument(toUrl, FileName, binary, function (file) {
        updateItemFields(file.ListItemAllFields, function(){
            alert("Updated Succeeded");
        }, function(){
            alert("Update Failed");
        });
    }, function(error){
            alert(error);
    });
}

function uploadDocument(url, fileName, arrayBuffer, complete, failure) {
    $.ajax({
        url: url + "/_api/web/lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='" + fileName + "', overwrite=true)?$expand=ListItemAllFields",
        type: "POST",
        data: arrayBuffer,
        processData: false,
        headers: {
            "Accept": "application/json; odata=verbose",
            "content-length": arrayBuffer.length,
            "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
        },
        success: function (data) {
                complete(data.d);
        },
        error: function (err) {
            failure(err);
        }
    });
}

function updateItemFields(item, complete, failure) {
    var now = new Date();
    jQuery.ajax({
        url: _spPageContextInfo.webAbsoluteUrl + "/_api/Web/Lists/getByTitle('Project Documents')/Items(" + item.Id + ")",
        type: "POST",
        data: JSON.stringify({
            "__metadata": { type: "SP.Data.Project_x0020_DocumentsItem" },
            CoordinatorId: _spPageContextInfo.userId,
            Year: now.getFullYear()
        }),
        headers: {
            Accept: "application/json;odata=verbose",
            "Content-Type": "application/json;odata=verbose",
            "X-RequestDigest": jQuery("#__REQUESTDIGEST").val(),
            "IF-MATCH": item.__metadata.etag,
            "X-Http-Method": "MERGE"
        },
        success: function (data) {
            complete(data.d);
        },
        error: function (err) {
            failure(err);
        }
    });
}