0

正如标题所示,我正在尝试使用 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());
    }
}

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

有人可以在这里推我吗?

4

1 回答 1

0

一旦确定了文件 url,就可以使用常规的 HTTP GET 请求(例如使用jQuery.get()函数)从服务器加载文件内容

例子

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

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"
    });
}
于 2017-01-14T20:04:28.990 回答