Speed up file uploading

This commit is contained in:
Ivan Yaremenchuk 2022-04-05 12:14:45 +02:00
parent f6dce1d63d
commit 0e106048c8
6 changed files with 36 additions and 8 deletions

View File

@ -3,12 +3,12 @@ using RestEase;
namespace NftFaucet.ApiClients;
[BaseAddress("https://gw.crustapps.net")]
[BaseAddress("https://pin.crustcode.com")]
public interface ICrustApiClient
{
[Header("Authorization")]
public string Auth { get; set; }
[Post("api/v0/add")]
Task<UploadResponse> UploadFile([Body] MultipartContent content, [Query("pin")] bool pin = true);
[Post("psa/pins")]
Task PinFile([Body] PinRequest request);
}

View File

@ -0,0 +1,11 @@
using NftFaucet.ApiClients.Models;
using RestEase;
namespace NftFaucet.ApiClients;
[BaseAddress("https://ipfs.infura.io:5001")]
public interface IInfuraIpfsApiClient
{
[Post("api/v0/add")]
Task<UploadResponse> UploadFile([Body] MultipartContent content, [Query("stream-channels")] bool streamChannels = true);
}

View File

@ -0,0 +1,7 @@
namespace NftFaucet.ApiClients.Models;
public class PinRequest
{
public string cid { get; set; }
public string name { get; set; }
}

View File

@ -6,7 +6,7 @@ public class StateStorage
{
public string TokenName { get; set; }
public string TokenDescription { get; set; }
public IpfsGatewayType IpfsGatewayType { get; set; } = IpfsGatewayType.Crust;
public IpfsGatewayType IpfsGatewayType { get; set; } = IpfsGatewayType.Infura;
public TokenType TokenType { get; set; } = TokenType.ERC721;
public double TokenAmount { get; set; } = 1;
public Uri LocalImageUrl { get; set; }

View File

@ -71,7 +71,7 @@
</SpaceItem>
<SpaceItem>
<Select DataSource="@IpfsGateways"
DefaultValue="@(nameof(IpfsGatewayType.Crust))"
DefaultValue="@(nameof(IpfsGatewayType.Infura))"
ValueName="@nameof(EnumWrapper<IpfsGatewayType>.ValueString)"
LabelName="@nameof(EnumWrapper<IpfsGatewayType>.Description)"
OnSelectedItemChanged="OnIpfsGatewayChange">

View File

@ -1,5 +1,6 @@
using System.Text;
using NftFaucet.ApiClients;
using NftFaucet.ApiClients.Models;
using NftFaucet.Models;
using NftFaucet.Models.Enums;
using NftFaucet.Options;
@ -48,9 +49,18 @@ public class IpfsService : IIpfsService
public async Task<Uri> Upload(string fileName, string fileType, byte[] fileBytes)
{
var fileUploadRequest = ToMultipartContent(fileName, fileType, fileBytes);
var client = RestClient.For<ICrustApiClient>();
client.Auth = GenerateAuthHeader();
var response = await client.UploadFile(fileUploadRequest);
var uploadClient = RestClient.For<IInfuraIpfsApiClient>();
var response = await uploadClient.UploadFile(fileUploadRequest);
var pinningClient = RestClient.For<ICrustApiClient>();
pinningClient.Auth = GenerateAuthHeader();
var pinRequest = new PinRequest
{
cid = response.Hash,
name = fileName,
};
await pinningClient.PinFile(pinRequest);
var uri = IpfsUrlPrefix + response.Hash;
return new Uri(uri);
}