2016-05-19 22 views
0

Wie der Titel vermuten lässt, versuche ich den Inhalt einer einfachen Textdatei mit JSOM zu lesen. Ich verwende ein Sharepoint-gehostetes Add-In dafür, die Datei, die ich zu lesen versuche, befindet sich auf dem Host-Web in einer Dokumentbibliothek.Inhalt des SP.File-Objekts als Text lesen mit JSOM

Hier ist mein JS-Code:

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

Doch meine succes Callback-Funktion, ich weiß nicht, wie ich den Inhalt des SP.File Objekts extrahieren kann. Ich habe versucht, das FileReader-Objekt von der HTML5-API zu verwenden, aber ich konnte nicht herausfinden, wie man das SP.File-Objekt in einen Blob umwandelt.

Kann mir jemand einen Schub geben?

Antwort

0

Sobald Datei-URL bestimmt Dateiinhalt vom Server geladen werden, um einen regulären HTTP-GET-Request (zB mit jQuery.get() function)

Beispiel

Das Beispiel verwendet wird gezeigt, wie die Liste der Dateien abzuzurufen in Bibliothek und dann Dateien herunterladen Inhalt

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

wo

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