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; namespace NftFaucet.ApiClients;
[BaseAddress("https://gw.crustapps.net")] [BaseAddress("https://pin.crustcode.com")]
public interface ICrustApiClient public interface ICrustApiClient
{ {
[Header("Authorization")] [Header("Authorization")]
public string Auth { get; set; } public string Auth { get; set; }
[Post("api/v0/add")] [Post("psa/pins")]
Task<UploadResponse> UploadFile([Body] MultipartContent content, [Query("pin")] bool pin = true); 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 TokenName { get; set; }
public string TokenDescription { 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 TokenType TokenType { get; set; } = TokenType.ERC721;
public double TokenAmount { get; set; } = 1; public double TokenAmount { get; set; } = 1;
public Uri LocalImageUrl { get; set; } public Uri LocalImageUrl { get; set; }

View File

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

View File

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