Getting Item ID after REST Upload to SharePoint 2013 Online Document Library
13,566
Add "?$expand=ListItemAllFields" to the url in your uploadDocument function. So
var url = String.format("{0}/_api/Web/Lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='{1}', overwrite=true)", _spPageContextInfo.webAbsoluteUrl, fileName);
will become
var url = String.format("{0}/_api/Web/Lists/getByTitle('Project Documents')/RootFolder/Files/Add(url='{1}', overwrite=true)?$expand=ListItemAllFields", _spPageContextInfo.webAbsoluteUrl, fileName);
In the success/complete function of the returned ajax call you should now have access to the fields of the listItem associated with the newly created file. The following is an example.
$(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);
}
});
}
Comments
-
Hell.Bent almost 2 years
Can somebody help me connect the dots between these functions. I can upload, but how do I get the ID of the file I just uploaded to update metadata columns on the File in the host Document Library?
Many Thanks!
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; }
-
letstango almost 10 yearsThat doesn't appear to do anything for me :(. Really struggling to find the associated item id for a MS.FileServices.File
-
letstango almost 10 yearsYou are a life saver. Using the OData expand works a treat -- but you have to make another request for the file info and not directly on the upload request
-
TMan almost 9 yearsDon't know if it's a typo or if it was changed, but I had to append 'ListItem' to the Library name in the metadata type, i.e 'SP.Data.Project_x0020_DocumentsListItem' instead of just 'Item'. Other than that it worked like a charm.
-
Gennady G about 7 yearsvar addedFileId = data.d.ListItemAllFields.ID;