49 lines
1.8 KiB
C#
49 lines
1.8 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace Microsoft.DotNet.Cli.Build.UploadToLinuxPackageRepository
|
|
{
|
|
internal class FileUploadStrategy : IAzurelinuxRepositoryServiceHttpStrategy
|
|
{
|
|
private readonly string _pathToPackageToUpload;
|
|
|
|
public FileUploadStrategy(string pathToPackageToUpload)
|
|
{
|
|
_pathToPackageToUpload = pathToPackageToUpload
|
|
?? throw new ArgumentNullException(nameof(pathToPackageToUpload));
|
|
}
|
|
|
|
public async Task<string> Execute(HttpClient client, Uri baseAddress)
|
|
{
|
|
var fileName = Path.GetFileName(_pathToPackageToUpload);
|
|
|
|
using (var content =
|
|
new MultipartFormDataContent())
|
|
{
|
|
var url = new Uri(baseAddress, "/v1/files");
|
|
content.Add(
|
|
new StreamContent(
|
|
new MemoryStream(
|
|
File.ReadAllBytes(_pathToPackageToUpload))),
|
|
"file",
|
|
fileName);
|
|
using (var message = await client.PostAsync(url, content))
|
|
{
|
|
if (!message.IsSuccessStatusCode)
|
|
{
|
|
throw new FailedToAddPackageToPackageRepositoryException(
|
|
$"{JsonConvert.SerializeObject(message)} failed to post file to {url} file name:{fileName} pathToPackageToUpload:{_pathToPackageToUpload}");
|
|
}
|
|
return await message.Content.ReadAsStringAsync();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|