使用JSOM以文本形式读取SP.File对象的内容 [英] Read content of SP.File object as text using JSOM

查看:107
本文介绍了使用JSOM以文本形式读取SP.File对象的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如标题所示,我正在尝试使用JSOM读取简单文本文件的内容.为此,我使用的是Sharepoint托管的加载项,我尝试读取的文件位于文档库中的宿主网上.

as the title suggests, I am trying to read the contents of a simple text file using JSOM. I am using a Sharepoint-hosted addin for this, the file I am trying to read resides on the host web in a document library.

这是我的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.

However, in my succes callback function, I don't know how I can extract the contents of the SP.File object. I tried using the FileReader object from HTML5 API but I couldn't figure out how to convert the SP.File object to a blob.

有人可以在这里推动我吗?

Can anybody give me a push here?

推荐答案

一旦确定文件url,便可以使用常规HTTP GET请求(例如,使用

Once file url is determined file content could be loaded from the server using a regular HTTP GET request (e.g. using jQuery.get() function)

示例

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

The example demonstrates how to retrieve the list of files in library and then download files content

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"
    });
}

这篇关于使用JSOM以文本形式读取SP.File对象的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆