Открыть файловый поток из файла sharepoint - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу открыть файловый поток из файла sharepoint (Microsoft.SharePoint.Client.File), но, похоже, не выяснил, как.

У меня есть доступ только к Microsoft.SharePoint.Client, потому что пакет Microsoft.SharePoint может не устанавливается из-за некоторых ошибок.

Это код, который у меня есть:

ClientContext ctx = new ClientContext("https://factionxyz0.sharepoint.com/sites/faktion-devs");
ctx.Credentials = CredentialCache.DefaultCredentials;
Microsoft.SharePoint.Client.File temp = ctx.Web.GetFileByServerRelativeUrl(filePath);
FileStream fs = new FileStream(???);

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

FileStream должен отображаться в файл. Следующий код демонстрирует, как получить поток через CSOM, а затем мы можем преобразовать его в FileStream с помощью временного файла.

ResourcePath filepath = ResourcePath.FromDecodedUrl(filename);

Microsoft.SharePoint.Client.File temp = context.Web.GetFileByServerRelativePath(filepath);

ClientResult<System.IO.Stream> crstream = temp.OpenBinaryStream();

context.Load(temp);
context.ExecuteQuery();

var tempFile = Path.GetTempFileName();
FileStream fs = System.IO.File.OpenWrite(tempFile);

if (crstream.Value != null){
      crstream.Value.CopyTo(fs);
}

Что касается Azure временного хранилища функции, вы можете воспользоваться следующим поток: Azure Функции Временное хранилище Или вы можете сохранить данные в Azure хранилище: Загрузить данные в хранилище BLOB-объектов с помощью Azure Функции

С наилучшими пожеланиями, Бейкер Конг

1 голос
/ 09 апреля 2020

Вы можете создать System.IO.FileStream, только если файл существует на физическом диске (или сопоставлен с диском через операционную систему).

Обходной путь: Вы в состоянии получить доступ к сырому URL файла? В этом случае загрузите файл на диск (если размер подходит), а затем прочитайте оттуда.

Например:

var httpClient = new HttpClient();

// HTTP GET Request
var response = await httpClient.GetAsync(... SharePoint URL ...);

// Get the Content Stream
var stream = await response.Content.ReadAsSteamAsync();


// Create a temporary file
var tempFile = Path.GetTempFileName();

using (var fs = File.OpenWrite(tempFile))
{
   await stream.CopyToAsync(fs);
}

// tempFile now contains your file locally, you can access it like
var fileStream = File.OpenRead(tempFile);

// Make sure you delete the temporary file after using it
File.Delete(tempFile);
...