使用REST API更改SharePoint文档库中现有文件的文件名

时间:2016-01-23 21:46:12

标签: rest sharepoint sharepoint-2013

我对如何使用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查询以获取文件和更新文件名的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以考虑至少两个选项:

选项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);
});

选项2.通过MoveTo REST endpoint

移动文件

示例

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