如何使用 sp.web (SPFX) 获取文档库中文件的 URL

How to get the URL of a file in a document library using sp.web (SPFX)

我需要获取 SharePoint 库(案例文档)中每个单独文件的 URL。目前我正在使用:

sp.web.lists.getByTitle("Case Documents").items.get().then((items: any[]) => { 
      let returnedItems: IListCItem[] = items.map((item) => { return new ListCItem(item); });

      this.setState({ 

        ListCItems: returnedItems, 
      }, () => {
        console.log(this.state.ListCItems);
      });
    });


//     sp.web.lists.getByTitle("Case Documents").items.select("ID","Title","CaseID/Title","CaseID/ID").expand("CaseID").get().then((items: any[]) => { 
//       let returnedItems: IListCItem[] = items.map((item) => { return new ListCItem(item); });
//  console.log(returnedItems);
//       this.setState({ 

//         ListCItems: returnedItems, 
//       });
//     });

...获取文件名列表。如您所见,我一直在努力使用注释掉的代码获取查找列。我把它包括在内是为了向您展示我是如何使用的。

谁能告诉我如何获取每个文件的 URL,这样我就可以为正在创建的 Web 部件中的每个文档创建可点击的链接。

我看过:https://github.com/SharePoint/PnP-JS-Core/wiki/Working-With:-Files 但我不清楚。我猜是这样的:

pnp.sp.web.getFolderByServerRelativeUrl("/sites/dev/documents").files.getByName("file.txt").getText().then((text: string) => {});


您甚至可以自己编写 URL。

[siteurl]/[document library name]/[file name with extension]

您可以通过以下方式在 spfx 中获取站点 url:

this.context.pageContext.web.absoluteUrl

您可以将其作为 prop 从您的 webpartname.ts 文件

传递给您的组件

示例演示:

sp.web.lists.getByTitle('MyDoc2').items.select('Id,FileRef').get().then((items:any) => {      
      items.map((item)=>{       
        console.log(item.FileRef);       
      }) 
    })

列 FileRef returns 文件 URL。在 FileRef 的情况下,它应该传递给 getItemsByCAMLQuery 中的扩展。喜欢代码:

const viewFields =  `
<ViewFields>
    <FieldRef Name='FileRef' />
    <FieldRef Name='ID' />
    <FieldRef Name='Title' />
</ViewFields>
`;

const queryOptions = `<QueryOptions><ViewAttributes Scope='RecursiveAll'/>  </QueryOptions>`;
const camlQuery = '';

sp.web.lists.getByTitle('Documents')
.getItemsByCAMLQuery({
    ViewXml: `<View>${viewFields}${camlQuery}${queryOptions}</View>`
}, 'FileRef')
.then(console.log)
.catch(console.log);

请注意 getItemsByCAMLQuery({ ViewXml:<View>${viewFields}${camlQuery}${queryOptions}</View> }, 'FileRef')