This commit is contained in:
2025-06-11 11:38:48 -04:00
parent 58c0a5b7ec
commit 1dfbc7f6c0
11 changed files with 963 additions and 2 deletions

82
AzureBlob.cs Normal file
View File

@@ -0,0 +1,82 @@
public class AzureBlobDownload
{
private readonly static HttpClient blobClient;
private readonly static SharePointConfig config;
static AzureBlobDownload()
{
config = SharePointConfig.GetConfig();
blobClient = new HttpClient() { BaseAddress = new Uri(config.blobEndpointUrl), Timeout = TimeSpan.FromMinutes(10) };
}
public static async Task<CopyResult> UploadBlob(string fullPath, SharePointObject file, object fileLock, string logFilePath, string token)
{
string requestUri = $"/{config.blobContainer}{fullPath}";
string dateInRfc1123Format = DateTime.UtcNow.ToString("R");
string blobType = "BlockBlob";
CopyResult result = new CopyResult();
try
{
HttpRequestMessage checkOnBlob = new HttpRequestMessage(HttpMethod.Head, requestUri);
checkOnBlob.Headers.Add("x-ms-date", dateInRfc1123Format);
checkOnBlob.Headers.Add("x-ms-version", "2020-10-02");
checkOnBlob.Headers.Add("Authorization", $"Bearer {token}");
string lastModified = "";
try
{
HttpResponseMessage metaCheck = await blobClient.SendAsync(checkOnBlob);
lastModified = metaCheck.Headers.FirstOrDefault(x => x.Key == "x-ms-meta-lastmodifieddatetime").Value.FirstOrDefault("");
}
catch
{
}
if (lastModified != file.lastModifiedDateTime.ToString())
{
using (HttpResponseMessage response = await blobClient.GetAsync(file.downloadUrl))
{
response.EnsureSuccessStatusCode();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, requestUri);
request.Content = new StreamContent(await response.Content.ReadAsStreamAsync());
request.Headers.Add("x-ms-date", dateInRfc1123Format);
request.Headers.Add("x-ms-version", "2020-10-02");
request.Headers.Add("x-ms-blob-type", blobType);
request.Headers.Add("Authorization", $"Bearer {token}");
request.Headers.Add("x-ms-meta-createdate", file.createdDateTime.ToString());
request.Headers.Add("x-ms-meta-lastmodifieddatetime", file.lastModifiedDateTime.ToString());
HttpResponseMessage blobResponse = await blobClient.SendAsync(request);
blobResponse.EnsureSuccessStatusCode();
}
result.sourcePath = file.downloadUrl;
result.targetPath = $"{config.blobEndpointUrl}{config.blobContainer}{fullPath}";
result.result = "OK";
lock (fileLock)
{
File.AppendAllText(logFilePath, $"Upload Blob Success: {file.name} uploaded to {config.blobEndpointUrl}{config.blobContainer}{fullPath}{Environment.NewLine}");
}
}
else
{
result.sourcePath = file.downloadUrl;
result.targetPath = $"{config.blobEndpointUrl}{config.blobContainer}{fullPath}";
result.result = "Exists";
lock (fileLock)
{
File.AppendAllText(logFilePath, $"Blob Exists: {file.name} exists at {config.blobEndpointUrl}{config.blobContainer}{fullPath}{Environment.NewLine}");
}
}
}
catch
{
result.sourcePath = file.downloadUrl;
result.targetPath = $"{config.blobEndpointUrl}{config.blobContainer}{fullPath}";
result.result = "FAILED";
lock (fileLock)
{
File.AppendAllText(logFilePath, $"Upload Blob Failure: {file.name} uploaded to {config.blobEndpointUrl}{config.blobContainer}{fullPath}{Environment.NewLine}");
}
}
return result;
}
}