Skip to content

Commit

Permalink
Implemented GetFileBytes
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberblast committed Nov 29, 2017
1 parent 2b83f93 commit 2ba6f0c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 20 deletions.
2 changes: 1 addition & 1 deletion SharePoint.Client/Delegates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ public enum State { Offline, Connecting, Connected, Error, ConnectionFailed, Aut
public delegate void StreamCall(Stream stream);
public delegate void ItemMethod(ListItem item);
public delegate S Transformer<T, S>(T initialValue);
}
}
4 changes: 2 additions & 2 deletions SharePoint.Client/ISPClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public interface ISPClient {
CookieCollection Cookies { get; set; }
bool Authenticate();
void Execute(Call action);
void GetFileStream(string serverRelativeUrl, StreamCall handler, ClientContext ctx);
void GetFileStream(string serverRelativeUrl, StreamCall handler);
void GetFileStream(string serverRelativeUrl, StreamCall handler, ClientContext ctx = null);
byte[] GetFileBytes(string serverRelativeUrl, ClientContext ctx = null);
}
}
10 changes: 4 additions & 6 deletions SharePoint.Client/QueryBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
using Microsoft.SharePoint.Client;
using System;

namespace cyberblast.SharePoint.Client
{
public static class QueryBuilder
{
namespace cyberblast.SharePoint.Client {
public static class QueryBuilder {
const int ROW_LIMIT = 300;

/// <summary>
/// Create a CAML query
/// </summary>
/// <param name="filter">filter expression. Will be wrapped into 'Where' tags.</param>
/// <param name="rowlimit">amount of items to retrieve per internal call.</param>
/// <param name="orderByFields">Sort order of items</param>
/// <returns>CAML query string</returns>
public static QueryExpression Query(Expression filter, int rowlimit, params Order[] orderByFields)
{
public static QueryExpression Query(Expression filter, int rowlimit, params Order[] orderByFields) {
return string.Format("<View><Query>{0}{1}</Query><RowLimit>{2}</RowLimit></View>", Where(filter), OrderBy(orderByFields), rowlimit);
}
/// <summary>
Expand Down
32 changes: 21 additions & 11 deletions SharePoint.Client/SPClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,29 @@ public void Execute(Call action) {
}
}

public void GetFileStream(string serverRelativeUrl, StreamCall handler, ClientContext ctx)
{
using (FileInformation remoteFile = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, serverRelativeUrl)) {
handler(remoteFile.Stream);
}
}
public void GetFileStream(string serverRelativeUrl, StreamCall handler)
{
Execute(ctx => {
GetFileStream(serverRelativeUrl, handler, ctx);
});
public void GetFileStream(string serverRelativeUrl, StreamCall handler, ClientContext ctx = null) {
void GetStream(ClientContext c){
using (FileInformation remoteFile = Microsoft.SharePoint.Client.File.OpenBinaryDirect(c, serverRelativeUrl)) {
handler(remoteFile.Stream);
}
};
if (ctx == null) Execute(GetStream);
else GetStream(ctx);
}
public byte[] GetFileBytes(string serverRelativeUrl, ClientContext ctx = null) {
byte[] bits = null;

void GetBytes(Stream stream) {
using (MemoryStream temp = new MemoryStream()) {
stream.CopyTo(temp, 16384); // 16KB buffer
bits = temp.ToArray();
}
}

GetFileStream(serverRelativeUrl, GetBytes, ctx);
return bits;
}

private void ExecutingWebRequest(object sender, WebRequestEventArgs e) {
if (!FormsBasedAuthAccepted)
e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
Expand Down

0 comments on commit 2ba6f0c

Please sign in to comment.