我对如何使用REST API更改SharePoint文档库中的现有文件有疑问。我在http://site url/<RootFolder>/<SubFolder>/File.docx
位置有几个文件。我有一个UI,它列出了这个子浮动位置的所有文件。当用户点击编辑时,我将文件名设置为文本框,用户可以在其中更改文件名。
在做了一些研究之后,我发现构建一个如下所示的端点:https://<site url>/_api/web/lists/getbytitle('Documents')/items(<item id>)
我们可以编辑文件元数据属性。但我无法找到更新驻留在SharePoint Doc库上的现有文档的文件名的最佳方法。
有人可以帮我解决REST API查询以获取文件和更新文件名的方法吗?
答案 0 :(得分:1)
您可以考虑至少两个选项:
您可以更新现有列表项的名称,如下所示
示例强>
function rename(webUrl,listTitle,itemId,fileName){
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items(" + itemId + ")";
return executeJson(endpointUrl)
.then(function(data){
var itemPayload = {};
itemPayload['__metadata'] = {'type': data.d['__metadata']['type']};
itemPayload['Title'] = fileName;
itemPayload['FileLeafRef'] = fileName;
var itemUrl = data.d['__metadata']['uri'];
var headers = {};
headers["X-HTTP-Method"] = "MERGE";
headers["If-Match"] = "*";
return executeJson(itemUrl,"POST",headers,itemPayload);
});
}
var webUrl = _spPageContextInfo.webAbsoluteUrl; // web url
var listTitle = "Documents"; //list title
var itemId = 1; //list item id
var fileName = "SP User Guide.docx"; //new file name
rename(webUrl,listTitle,itemId,fileName)
.done(function(item){
console.log('Renamed');
})
.fail(function(error){
console.log(error);
});
示例强>
function moveTo(webUrl,sourceFileUrl,targetFileUrl){
var endpointUrl = webUrl + "/_api/web/getfilebyserverrelativeurl('" + sourceFileUrl + "')/moveto(newurl='" + targetFileUrl + "',flags=1)";
return executeJson(endpointUrl,"POST");
}
var webUrl = _spPageContextInfo.webAbsoluteUrl; // web url
var sourceFileUrl = "/Documents/SP2010.docx";
var targetFileUrl = "/Documents/SP2013.docx";
moveTo(webUrl,sourceFileUrl,targetFileUrl)
.done(function(item){
console.log('Done');
})
.fail(function(error){
console.log(error);
});
executeJson
功能:
function executeJson(url,method,headers,payload)
{
headers = headers || {};
method = method || 'GET';
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}
答案 1 :(得分:0)
您需要使用MoveTo方法执行此操作,如MSDN https://msdn.microsoft.com/en-us/library/office/dn450841.aspx#bk_FileMoveTo中所述。
executor.executeAsync({
url: "<app web url>/_api/SP.AppContextSite(@target)/web
/getfilebyserverrelativeurl('/Shared Documents/filename.docx')
/moveto(newurl='/Other Folder/filename.docx',flags=1)
?@target='<host web url>'",
method: "POST",
success: successHandler,
error: errorHandler
});