50 lines
1.8 KiB
C#
50 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 NuGet.Protocol;
|
||
|
|
||
|
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(
|
||
|
$"{message.ToJson()} failed to post file to {url} file name:{fileName} pathToPackageToUpload:{_pathToPackageToUpload}");
|
||
|
}
|
||
|
return await message.Content.ReadAsStringAsync();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|