Files
BITKit/Core/Web/WebFileProvider.cs
CortexCore 4565ff2e35 1
2023-06-05 16:25:06 +08:00

123 lines
3.1 KiB
C#

using BITKit.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebDav;
namespace BITKit.Web
{
public class WebFileProvider : IStorageFile
{
public WebFileProvider(IWebDavClient client,string requestUrl)
{
this.client = client;
this.requestUrl = requestUrl;
}
readonly string requestUrl;
IWebDavClient client { get; set; }
public Stream CreateFile()
{
throw new NotImplementedException();
}
public string GetFileType()
{
throw new NotImplementedException();
}
public DateTime GetLastUpdated()
{
throw new NotImplementedException();
}
public string GetName()
{
return requestUrl;
}
public string GetPath()
{
return requestUrl;
}
public long GetSize()
{
throw new NotImplementedException();
}
public string GetText()
{
MemoryStream memory = new MemoryStream();
var task = client.GetRawFile(requestUrl);
task.Wait();
task.Result.Stream.CopyTo(memory);
var value =StringHelper.GetString(memory.GetBuffer());
memory.Dispose();
task.Result.Stream.Dispose();
return value;
}
public Stream OpenRead()
{
throw new NotImplementedException();
}
public Stream OpenWrite()
{
throw new NotImplementedException();
}
public async Task<Stream> OpenReadAsync()
{
var file = await client.GetRawFile(requestUrl);
if(file.IsSuccessful)
{
var tempPath = PathHelper.GetTempFilePath(requestUrl);
using (var fs = File.Create(tempPath))
{
await file.Stream.CopyToAsync(fs, BITApp.CancellationTokenSource.Token);
fs.Close();
}
{
var fs = File.OpenRead(tempPath);
return fs;
}
}
else
{
throw new Exception($"Get WebDav file [{requestUrl}] error:{file.StatusCode}");
}
}
public async Task<Stream> OpenWriteAsync()
{
var file = await client.GetRawFile(requestUrl);
return file.Stream;
}
public Task<Stream> CreateFileAsync()
{
throw new NotImplementedException();
}
public async Task<string> GetTextAsync()
{
var file = await client.GetRawFile(requestUrl);
if(file.IsSuccessful)
{
using (StreamReader reader = new(file.Stream))
{
return reader.ReadToEnd();
}
}
else
{
throw new Exception($"WebDavError:{file.StatusCode}");
}
}
}
}