使用JSOM将SP.File对象的内容作为文本读取

时间:2016-05-19 12:18:00

标签: sharepoint-2013 filereader sharepoint-jsom

正如标题所示,我试图使用JSOM读取简单文本文件的内容。我正在使用Sharepoint托管的插件,我试图读取的文件驻留在文档库中的主机Web上。

这是我的JS代码:

function printAllListNamesFromHostWeb() {
    context = new SP.ClientContext(appweburl);
    factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
    context.set_webRequestExecutorFactory(factory);
    appContextSite = new SP.AppContextSite(context, hostweburl);

    this.web = appContextSite.get_web();
    documentslist = this.web.get_lists().getByTitle('Documents');

    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View><ViewFields><FieldRef Name="Name"/></ViewFields></View>');
    listitems = documentslist.getItems(camlQuery);

    context.load(listitems, 'Include(File,FileRef)');

    context.executeQueryAsync(
        Function.createDelegate(this, successHandler),
        Function.createDelegate(this, errorHandler)
    );

    function successHandler() {
        var enumerator = listitems.getEnumerator();
        while (enumerator.moveNext()) {
            var results = enumerator.get_current();
            var file = results.get_file();

            //Don't know how to get this to work...
            var fr = new FileReader();
            fr.readAsText(file.get);
        }
    }

    function errorHandler(sender, args) {
        console.log('Could not complete cross-domain call: ' + args.get_message());
    }
}

但是,在我的succes回调函数中,我不知道如何提取SP.File对象的内容。我尝试使用HTML5 API中的FileReader对象,但我无法弄清楚如何将SP.File对象转换为blob。

有人能帮我推吗?

1 个答案:

答案 0 :(得分:0)

确定文件网址后,可以使用常规HTTP GET请求从服务器加载文件内容(例如,使用jQuery.get() function

示例

该示例演示了如何检索库中的文件列表,然后下载文件内容

loadItems("Documents",
        function(items) {

           var promises = $.map(items.get_data(),function(item){
               return getFileContent(item.get_item('FileRef'));
           });

           $.when.apply($, promises)
           .then(function(content) {
                   console.log("Done");
                   //print files content
                   $.each(arguments, function (idx, args) {
                       console.log(args[0])
                   });
                },function(e) {
                   console.log("Failed");
                });
        },
        function(sender,args){
            console.log(args.get_message());
        }
    );

,其中

function loadItems(listTitle,success,error){
   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_web();
   var list = web.get_lists().getByTitle(listTitle);
   var items = list.getItems(createAllFilesQuery());
   ctx.load(items, 'Include(File,FileRef)');
   ctx.executeQueryAsync(
        function() {
           success(items);          
        },
        error); 
}


function createAllFilesQuery(){
    var qry = new SP.CamlQuery();
    qry.set_viewXml('<View Scope="RecursiveAll"><Query><Where><Eq><FieldRef Name="FSObjType" /><Value Type="Integer">0</Value></Eq></Where></Query></View>');
    return qry;
}


function getFileContent(fileUrl){
    return $.ajax({
        url: fileUrl,
        type: "GET"
    });
}