背景:在使用sharepoint管理web应用时,往往会用到sp的文档库,和相关的restfull API用于文档的存取

问题:如何使用restAPI上传文件到sharepoint,并上传之后获取文件的上传时间,作者等信息?

解决方案:

1.上传:

{

var url = _spPageContextInfo.siteServerRelativeUrl
                  + "/_api/web/getfolderbyserverrelativeurl('" + libName + folderPath + "')/files" 
                  + "/add(overwrite=true,url='" + fileName + "')";

//_spPageContextInfo.siteServerRelativeUrl:

//libName :library name; eg:DocLib;

//folderPath ;eg:OPP-123456789/version1/Zac/;

//fileName:the name of file that you selected;

 var dfd = $.Deferred();
        var reader = new FileReader();
        reader.onloadend = function (evt) {
            if (evt.target.readyState == FileReader.DONE) {
                var buffer = evt.target.result;
                var completeUrl = _spPageContextInfo.siteServerRelativeUrl
                  + "/_api/web/getfolderbyserverrelativeurl('" + libname + foldername + "')/files"
                  + "/add(overwrite=true,url='" + filename + "')";

                $.ajax({
                    url: url  ,
                    type: "POST",
                    data: buffer,
                    processData: false,
                    headers: {
                        "accept": "application/json;odata=verbose",
                        "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                    },
                    success: function (data) {
                        dfd.resolve(data);
                    }
                });
            }
        };
        reader.readAsArrayBuffer(file);

}

2.获取文件信息

sharepoint为了减少冗余,将Author等user对象通过Id和文件信息关联起来,所以在使用appUrl + "/_api/web/getfilebyserverrelativeurl('" + fileRelativeUrl + "') 这样的api去火取文件信息时,取到的Author或ModifiedBy均是相应user在该站点的id;这个时候,一种解决办法是获取到id再去站点的userList取到用户信息(EMail,Name等),另一个更好的解决办法,就是使用restAPI的expand和select关键字去将关联user对象进行扩展查询,这个时候如果在多个关联的list之间的查询时,就会极大的减少api的调用次数。

 

function getFileInfo(fileRelativeUrl) {

//fileRelativeUrl:"/SiteName/DocLib/OPP-0000000000/2/demo.PNG"
        var dfd = $.Deferred(),
            appUrl = app.config.ENV.siteAbsoluteUrl,
            fileInfo = {
                modifiedBy: "",
                lastModified: ""
            },
            fileInfoUri = appUrl + "/_api/web/getfilebyserverrelativeurl('" + fileRelativeUrl + "')/?$expand=ListItemAllFields/Modified,ModifiedBy/Title&$select=ListItemAllFields/Modified,ModifiedBy/Title";
        $.ajax({
            url: fileInfoUri,
            method: "GET",
            dataType: "JSON",
            headers: {
                "accept": "application/JSON;odata=verbose"
            },
            success: function (data) {
                fileInfo.modifiedBy = data.d.ModifiedBy.Title;
                fileInfo.lastModified = new Date(data.d.ListItemAllFields.Modified).format("dd MMM yyyy");
                dfd.resolve(fileInfo);
            },
            error: function (data) {
                dfd.resolve(fileInfo);
            },
            failed: function (data) {
                dfd.resolve(fileInfo);
            },
            async: true
        });  
        return dfd.promise();
    }

扩展:以下是一个多个List关联的sp query request:

_spPageContextInfo.siteServerRelativeUrl/_api/web/Lists/getbytitle('Maintenance')/items/?$expand=Role/Name,CalculatedRegion/Region,

CalculatedRegion/SubRegion1,CalculatedRegion/SubRegion2,CalculatedRegion/SubRegion3,

CalculatedIndustry/Industry_Vertical,CalculatedIndustry/Industry_Segment,

PrimaryContact/EMail,PrimaryContact/Title,PrimaryContact/SipAddress,PrimaryContact/Name

&$select=Role/Name,

CalculatedRegion/Region,

CalculatedRegion/SubRegion1,CalculatedRegion/SubRegion2,CalculatedRegion/SubRegion3,

CalculatedIndustry/Industry_Vertical,CalculatedIndustry/Industry_Segment,

PrimaryContact/EMail,PrimaryContact/Title,PrimaryContact/SipAddress,PrimaryContact/Name

&$filter=Role/Name eq 'tntLead' and GBU eq 'Global' and CalculatedRegion/Region eq 'AMS' 

and CalculatedRegion/SubRegion1 eq 'All' and CalculatedRegion/SubRegion2 eq 'All' and CalculatedRegion/SubRegion3 eq 'All' 

and CalculatedIndustry/Industry_Vertical eq '_' and CalculatedIndustry/Industry_Segment eq '_'

评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!