从文档库获取文件名



我有一个名为DocLibrary的文档库。在里面,我创建了一些文件夹。每个文件夹有3个其他文件夹。在里面,我存储特定的文件示例:DocLibrary>NF1>Communications,其中DocLibrary是文档库,NF1是DocLibrary内的文件夹,Communications是NF1内的文件夹。

现在,我想提供一个下载链接,指向Communications文件夹中按修改日期排序的特定文件。我面临的问题是如何转到通讯文件夹,然后选择文件名。

我使用的是java脚本。

现在我正在使用以下代码。但我对这一点完全陌生,对如何处理这一问题的想法有限。请帮忙。

function test1()
{
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle('DocLibrary');
var query = SP.CamlQuery.createAllItemsQuery();
query.set_folderServerRelativeUrl('/DocLibrary/NF1/Communications/');
allItems = list.getItems(query);
alert('hi');
context.load(allItems);
context.executeQueryAsync(Function.createDelegate(this, this.success),   Function.createDelegate(this, this.failed));
}
function success()
{
var fileUrls = '';
var ListEnumerator = this.allItems.getEnumerator();
while(ListEnumerator.moveNext())
{
var currentItem = ListEnumerator.get_current();
var _contentType = currentItem.get_contentType();
if(_contentType.get_name() != 'Folder')
{
var File = currentItem.get_file();
if(File != null)
{
fileUrls += File.get_serverRelativeUrl() + 'n';
}
}
}
alert(fileUrls);
}
function failed(sender, args) {
alert('failed. Message:' + args.get_message());
}

由于您使用的是JavaScript,我建议您向SharePoint REST API发出GET请求以获取所需信息。

您只需向发出请求,就可以访问您的文档库及其文件夹

http://siteUrl/_api/web/getfolderbyserverrelativeurl('Documents/NF1/Communications')/files?$orderby=TimeLastModified%20desc

如果你在浏览器中导航到上面的URL,用你的网站真实的URL替换siteUrl,你会得到XML格式的回复。


从JavaScript请求

请注意,此方法需要jQuery才能工作,否则您将不得不对服务器生成XMLHttpRequest

要从JavaScript发出请求,$.ajax()非常简单。

$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "_api/web/getfolderbyserverrelativeurl('Documents/NF1/Communications')/files?$orderby=TimeLastModified%20desc",
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function (result) {
//Do something with the result here!
$.each(result.d.results, function(i, item){
console.log("The URL to the file is: " + item.__metadata.uri);
});
},
error: function (error) {
//Ouch, an error occured with the request
//Don't forget to handle the error in some way!
}
});

这将返回文件夹中所有文件的数组,按字段TimeLastModified排序,其中最新修改时间的文件位于顶部索引。可以通过数组中每个对象的__metadata.uri属性访问每个文件的URL。

在上面的代码示例中,我使用jQuery$.each()函数迭代所有文件,并将文件的URL打印到控制台。根据您想对URL做什么,您必须在那里编写自定义代码。

如果您想进一步探索REST API,可以参考MSDN文件和文件夹REST API参考。

一些建议

1) 您可以构造只返回Files并按修改日期排序的查询:

<View>
<Query>
<Where>
<Eq><FieldRef Name="FSObjType" /><Value Type="Integer">0</Value></Eq>                                                                                                                                                    
</Where>
<OrderBy>
<FieldRef Name="Modified" Ascending="FALSE" />
</OrderBy>
</Query>
</View>

2) 从性能的角度来看,因为您对File属性感兴趣,所以可以明确指定要检索的属性,例如:

context.load(items,'Include(File.ServerRelativeUrl)'); // retrieve File.ServerRelativeUrl

修改示例

function getFiles(listTitle,folderUrl,success,failed)
{
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var createItemsQuery = function(folderUrl){
var qry = new SP.CamlQuery();
qry.set_viewXml('<View><Query><Where><Eq><FieldRef Name="FSObjType" /><Value Type="Integer">0</Value></Eq></Where><OrderBy><FieldRef Name="Modified" Ascending="FALSE" /></OrderBy></Query></View>');
qry.set_folderServerRelativeUrl(folderUrl);
return qry;
};
var items = list.getItems(createItemsQuery(folderUrl));
context.load(items,'Include(File.ServerRelativeUrl)');
context.executeQueryAsync(
function(){
success(items)
},
failed);
}

使用

var listTitle = 'DocLibrary';
var folderUrl = '/DocLibrary/NF1/Communications'; //format: /[site]/[library]/[folder]
getFiles(listTitle,folderUrl,
function(items)
{ 
var fileUrls = []; 
items.get_data().forEach(function(item){
var file = item.get_file();
fileUrls.push(file.get_serverRelativeUrl());
});
var result = fileUrls.join(',');   
console.log(result);
},
function(sender, args) {
console.log('Message:' + args.get_message());
});

相关内容

  • 没有找到相关文章

最新更新