引言
之前我们已经说过了、NFT.Storage是一个基于IPFS的分布式存储服务,专门用于存储和管理非同质化代币(NFT)相关的数据和资产。它是由Protocol Labs和Pinata共同推出的服务。今天我们基于nft.storage为列、使用java对接打通这个ipfs分布式存储系统。
展开之前也可以看之前对IFPS的基本介绍《IPFS分布式存储系统》、相信对你更加有帮助。
一、nft.storage操作(必读)
注意:要使用科学上网
- 1.1首先我们打开之后官网是这样子的
- 1.2创建项目私钥,到时候对接api需要
官方指引:https://app.nft.storage/v1/docs/intro
- 1.3注意api对接官方有QPS限制要求,
二、java对接
首先引入核心依赖pom
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp-version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>${okhttp-version}</version>
<exclusions>
<exclusion>
<artifactId>okhttp</artifactId>
<groupId>com.squareup.okhttp3</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson-version}</version>
</dependency>
<dependency>
<groupId>io.gsonfire</groupId>
<artifactId>gson-fire</artifactId>
<version>${gson-fire-version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3-version}</version>
</dependency>
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threetenbp</artifactId>
<version>${threetenbp-version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>${javax-annotation-version}</version>
<scope>provided</scope>
</dependency>
<!-- test dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.7</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<gson-fire-version>1.8.5</gson-fire-version>
<swagger-core-version>1.6.2</swagger-core-version>
<okhttp-version>3.8.1</okhttp-version>
<gson-version>2.8.6</gson-version>
<commons-lang3-version>3.11</commons-lang3-version>
<threetenbp-version>1.5.0</threetenbp-version>
<javax-annotation-version>1.3.2</javax-annotation-version>
<junit-version>4.13.1</junit-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
核心api
import com.google.gson.reflect.TypeToken;
import com.nft.server.file.nft.*;
import com.nft.server.file.nft.model.DeleteResponse;
import com.nft.server.file.nft.model.GetResponse;
import com.nft.server.file.nft.model.ListResponse;
import com.nft.server.file.nft.model.UploadResponse;
import org.springframework.stereotype.Component;
import org.threeten.bp.OffsetDateTime;
import java.io.File;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class NftStorageApi {
private ApiClient localVarApiClient;
public NftStorageApi() {
this(Configuration.getDefaultApiClient());
}
public NftStorageApi(ApiClient apiClient) {
this.localVarApiClient = apiClient;
}
public ApiClient getApiClient() {
return localVarApiClient;
}
public void setApiClient(ApiClient apiClient) {
this.localVarApiClient = apiClient;
}
/**
* Build call for delete
* @param cid CID for the NFT (required)
* @param _callback Callback for upload/download progress
* @return Call to execute
* @throws ApiException If fail to serialize the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call deleteCall(String cid, final ApiCallback _callback) throws ApiException {
Object localVarPostBody = null;
// create path and map variables
String localVarPath = "/{cid}"
.replaceAll("\\{" + "cid" + "\\}", localVarApiClient.escapeString(cid.toString()));
List<Pair> localVarQueryParams = new ArrayList<Pair>();
List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
Map<String, String> localVarHeaderParams = new HashMap<String, String>();
Map<String, String> localVarCookieParams = new HashMap<String, String>();
Map<String, Object> localVarFormParams = new HashMap<String, Object>();
final String[] localVarAccepts = {
"application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}
final String[] localVarContentTypes = {
};
final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
localVarHeaderParams.put("Content-Type", localVarContentType);
String[] localVarAuthNames = new String[] { "bearerAuth" };
return localVarApiClient.buildCall(localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
}
@SuppressWarnings("rawtypes")
private okhttp3.Call deleteValidateBeforeCall(String cid, final ApiCallback _callback) throws ApiException {
// verify the required parameter 'cid' is set
if (cid == null) {
throw new ApiException("Missing the required parameter 'cid' when calling delete(Async)");
}
okhttp3.Call localVarCall = deleteCall(cid, _callback);
return localVarCall;
}
/**
* Stop storing the content with the passed CID
* Stop storing the content with the passed CID on nft.storage. - Unpin the item from the underlying IPFS pinning service. - Cease renewals for expired Filecoin deals involving the CID. ⚠️ This does not remove the content from the network. - Does not terminate any established Filecoin deal. - Does not remove the content from other IPFS nodes in the network that already cached or pinned the CID. Note: the content will remain available if another user has stored the CID with nft.storage.
* @param cid CID for the NFT (required)
* @return DeleteResponse
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public DeleteResponse delete(String cid) throws ApiException {
ApiResponse<DeleteResponse> localVarResp = deleteWithHttpInfo(cid);
return localVarResp.getData();
}
/**
* Stop storing the content with the passed CID
* Stop storing the content with the passed CID on nft.storage. - Unpin the item from the underlying IPFS pinning service. - Cease renewals for expired Filecoin deals involving the CID. ⚠️ This does not remove the content from the network. - Does not terminate any established Filecoin deal. - Does not remove the content from other IPFS nodes in the network that already cached or pinned the CID. Note: the content will remain available if another user has stored the CID with nft.storage.
* @param cid CID for the NFT (required)
* @return ApiResponse<DeleteResponse>
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public ApiResponse<DeleteResponse> deleteWithHttpInfo(String cid) throws ApiException {
okhttp3.Call localVarCall = deleteValidateBeforeCall(cid, null);
Type localVarReturnType = new TypeToken<DeleteResponse>(){}.getType();
return localVarApiClient.execute(localVarCall, localVarReturnType);
}
/**
* Stop storing the content with the passed CID (asynchronously)
* Stop storing the content with the passed CID on nft.storage. - Unpin the item from the underlying IPFS pinning service. - Cease renewals for expired Filecoin deals involving the CID. ⚠️ This does not remove the content from the network. - Does not terminate any established Filecoin deal. - Does not remove the content from other IPFS nodes in the network that already cached or pinned the CID. Note: the content will remain available if another user has stored the CID with nft.storage.
* @param cid CID for the NFT (required)
* @param _callback The callback to be executed when the API call finishes
* @return The request call
* @throws ApiException If fail to process the API call, e.g. serializing the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call deleteAsync(String cid, final ApiCallback<DeleteResponse> _callback) throws ApiException {
okhttp3.Call localVarCall = deleteValidateBeforeCall(cid, _callback);
Type localVarReturnType = new TypeToken<DeleteResponse>(){}.getType();
localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
return localVarCall;
}
/**
* Build call for list
* @param before Return results created before provided timestamp (optional)
* @param limit Max records to return (optional, default to 10)
* @param _callback Callback for upload/download progress
* @return Call to execute
* @throws ApiException If fail to serialize the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call listCall(OffsetDateTime before, Integer limit, final ApiCallback _callback) throws ApiException {
Object localVarPostBody = null;
// create path and map variables
String localVarPath = "/";
List<Pair> localVarQueryParams = new ArrayList<Pair>();
List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
Map<String, String> localVarHeaderParams = new HashMap<String, String>();
Map<String, String> localVarCookieParams = new HashMap<String, String>();
Map<String, Object> localVarFormParams = new HashMap<String, Object>();
if (before != null) {
localVarQueryParams.addAll(localVarApiClient.parameterToPair("before", before));
}
if (limit != null) {
localVarQueryParams.addAll(localVarApiClient.parameterToPair("limit", limit));
}
final String[] localVarAccepts = {
"application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}
final String[] localVarContentTypes = {
};
final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
localVarHeaderParams.put("Content-Type", localVarContentType);
String[] localVarAuthNames = new String[] { "bearerAuth" };
return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
}
@SuppressWarnings("rawtypes")
private okhttp3.Call listValidateBeforeCall(OffsetDateTime before, Integer limit, final ApiCallback _callback) throws ApiException {
okhttp3.Call localVarCall = listCall(before, limit, _callback);
return localVarCall;
}
/**
* List all stored files
*
* @param before Return results created before provided timestamp (optional)
* @param limit Max records to return (optional, default to 10)
* @return ListResponse
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public ListResponse list(OffsetDateTime before, Integer limit) throws ApiException {
ApiResponse<ListResponse> localVarResp = listWithHttpInfo(before, limit);
return localVarResp.getData();
}
/**
* List all stored files
*
* @param before Return results created before provided timestamp (optional)
* @param limit Max records to return (optional, default to 10)
* @return ApiResponse<ListResponse>
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public ApiResponse<ListResponse> listWithHttpInfo(OffsetDateTime before, Integer limit) throws ApiException {
okhttp3.Call localVarCall = listValidateBeforeCall(before, limit, null);
Type localVarReturnType = new TypeToken<ListResponse>(){}.getType();
return localVarApiClient.execute(localVarCall, localVarReturnType);
}
/**
* List all stored files (asynchronously)
*
* @param before Return results created before provided timestamp (optional)
* @param limit Max records to return (optional, default to 10)
* @param _callback The callback to be executed when the API call finishes
* @return The request call
* @throws ApiException If fail to process the API call, e.g. serializing the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call listAsync(OffsetDateTime before, Integer limit, final ApiCallback<ListResponse> _callback) throws ApiException {
okhttp3.Call localVarCall = listValidateBeforeCall(before, limit, _callback);
Type localVarReturnType = new TypeToken<ListResponse>(){}.getType();
localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
return localVarCall;
}
/**
* Build call for status
* @param cid CID for the NFT (required)
* @param _callback Callback for upload/download progress
* @return Call to execute
* @throws ApiException If fail to serialize the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call statusCall(String cid, final ApiCallback _callback) throws ApiException {
Object localVarPostBody = null;
// create path and map variables
String localVarPath = "/{cid}"
.replaceAll("\\{" + "cid" + "\\}", localVarApiClient.escapeString(cid.toString()));
List<Pair> localVarQueryParams = new ArrayList<Pair>();
List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
Map<String, String> localVarHeaderParams = new HashMap<String, String>();
Map<String, String> localVarCookieParams = new HashMap<String, String>();
Map<String, Object> localVarFormParams = new HashMap<String, Object>();
final String[] localVarAccepts = {
"application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}
final String[] localVarContentTypes = {
};
final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
localVarHeaderParams.put("Content-Type", localVarContentType);
String[] localVarAuthNames = new String[] { "bearerAuth" };
return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
}
@SuppressWarnings("rawtypes")
private okhttp3.Call statusValidateBeforeCall(String cid, final ApiCallback _callback) throws ApiException {
// verify the required parameter 'cid' is set
if (cid == null) {
throw new ApiException("Missing the required parameter 'cid' when calling status(Async)");
}
okhttp3.Call localVarCall = statusCall(cid, _callback);
return localVarCall;
}
/**
* Get information for the stored file CID
* Includes the IPFS pinning state and the Filecoin deal state.
* @param cid CID for the NFT (required)
* @return GetResponse
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public GetResponse status(String cid) throws ApiException {
ApiResponse<GetResponse> localVarResp = statusWithHttpInfo(cid);
return localVarResp.getData();
}
/**
* Get information for the stored file CID
* Includes the IPFS pinning state and the Filecoin deal state.
* @param cid CID for the NFT (required)
* @return ApiResponse<GetResponse>
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public ApiResponse<GetResponse> statusWithHttpInfo(String cid) throws ApiException {
okhttp3.Call localVarCall = statusValidateBeforeCall(cid, null);
Type localVarReturnType = new TypeToken<GetResponse>(){}.getType();
return localVarApiClient.execute(localVarCall, localVarReturnType);
}
/**
* Get information for the stored file CID (asynchronously)
* Includes the IPFS pinning state and the Filecoin deal state.
* @param cid CID for the NFT (required)
* @param _callback The callback to be executed when the API call finishes
* @return The request call
* @throws ApiException If fail to process the API call, e.g. serializing the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call statusAsync(String cid, final ApiCallback<GetResponse> _callback) throws ApiException {
okhttp3.Call localVarCall = statusValidateBeforeCall(cid, _callback);
Type localVarReturnType = new TypeToken<GetResponse>(){}.getType();
localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
return localVarCall;
}
/**
* Build call for store
* @param body (required)
* @param _callback Callback for upload/download progress
* @return Call to execute
* @throws ApiException If fail to serialize the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call storeCall(File body, final ApiCallback _callback) throws ApiException {
Object localVarPostBody = body;
// create path and map variables
String localVarPath = "/upload";
List<Pair> localVarQueryParams = new ArrayList<Pair>();
List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
Map<String, String> localVarHeaderParams = new HashMap<String, String>();
Map<String, String> localVarCookieParams = new HashMap<String, String>();
Map<String, Object> localVarFormParams = new HashMap<String, Object>();
final String[] localVarAccepts = {
"application/json"
};
final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
if (localVarAccept != null) {
localVarHeaderParams.put("Accept", localVarAccept);
}
final String[] localVarContentTypes = {
"image/png", "application/octet-stream", "multipart/form-data"
};
final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
localVarHeaderParams.put("Content-Type", localVarContentType);
String[] localVarAuthNames = new String[] { "bearerAuth" };
return localVarApiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
}
@SuppressWarnings("rawtypes")
private okhttp3.Call storeValidateBeforeCall(File body, final ApiCallback _callback) throws ApiException {
// verify the required parameter 'body' is set
if (body == null) {
throw new ApiException("Missing the required parameter 'body' when calling store(Async)");
}
okhttp3.Call localVarCall = storeCall(body, _callback);
return localVarCall;
}
/**
* Store a file
* Store a file with nft.storage. - Submit a HTTP `POST` request passing the file data in the request body. - To store multiple files in a directory, submit a `multipart/form-data` HTTP `POST` request. Use the `Content-Disposition` header for each part to specify a filename.
* @param body (required)
* @return UploadResponse
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public UploadResponse store(File body) throws ApiException {
ApiResponse<UploadResponse> localVarResp = storeWithHttpInfo(body);
return localVarResp.getData();
}
/**
* Store a file
* Store a file with nft.storage. - Submit a HTTP `POST` request passing the file data in the request body. - To store multiple files in a directory, submit a `multipart/form-data` HTTP `POST` request. Use the `Content-Disposition` header for each part to specify a filename.
* @param body (required)
* @return ApiResponse<UploadResponse>
* @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public ApiResponse<UploadResponse> storeWithHttpInfo(File body) throws ApiException {
okhttp3.Call localVarCall = storeValidateBeforeCall(body, null);
Type localVarReturnType = new TypeToken<UploadResponse>(){}.getType();
return localVarApiClient.execute(localVarCall, localVarReturnType);
}
/**
* Store a file (asynchronously)
* Store a file with nft.storage. - Submit a HTTP `POST` request passing the file data in the request body. - To store multiple files in a directory, submit a `multipart/form-data` HTTP `POST` request. Use the `Content-Disposition` header for each part to specify a filename.
* @param body (required)
* @param _callback The callback to be executed when the API call finishes
* @return The request call
* @throws ApiException If fail to process the API call, e.g. serializing the request body object
* @http.response.details
<table summary="Response Details" border="1">
<tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
<tr><td> 200 </td><td> OK </td><td> - </td></tr>
<tr><td> 401 </td><td> Unauthorized </td><td> - </td></tr>
<tr><td> 403 </td><td> Forbidden </td><td> - </td></tr>
<tr><td> 5XX </td><td> Internal Server Error </td><td> - </td></tr>
</table>
*/
public okhttp3.Call storeAsync(File body, final ApiCallback<UploadResponse> _callback) throws ApiException {
okhttp3.Call localVarCall = storeValidateBeforeCall(body, _callback);
Type localVarReturnType = new TypeToken<UploadResponse>(){}.getType();
localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
return localVarCall;
}
}
package com.nft.server.file.nft.apikey;
import com.nft.server.base.redis.RedisTemplateService;
import com.nft.server.system.po.SysSettingPO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import static com.nft.common.base.constant.SysSettingConstant.NFT_API_KEY_LIST;
/**
*
*
* @author nftStorage的apiKey
* @version
*/
@Component
public class ApiKeyArray {
private static final String[] apiKeyArray = {
"----------------key------"
};
private int currentIndex = 0;
@Autowired
private RedisTemplateService redisTemplateService;
// 轮询获取apiKey
public String getApiKey() {
List<Object> apiKeyArray = redisTemplateService.lGet(NFT_API_KEY_LIST, 0, -1);
String value = (String) apiKeyArray.get(currentIndex);
currentIndex = (currentIndex + 1) % apiKeyArray.size();
return value;
}
}
上传文件
ApiClient apiClient = nftStorageApi.getApiClient();
// Configure HTTP bearer authorization: bearerAuth
HttpBearerAuth bearerAuth = (HttpBearerAuth) apiClient.getAuthentication("bearerAuth");
// 获取apikey
bearerAuth.setBearerToken(apiKeyArray.getApiKey());
//传入文件流
File body = convertMultiPartToFile(file);
UploadResponse result = nftStorageApi.store(body);
if (result.getOk()) {
NFT nft = result.getValue();
String cid = nft.getCid();
url = getNftStorageFileUrl(cid);
return url;
}
以上是核心代码,依赖代码我上次到资源里面,免费下载
https://download.csdn.net/download/qq_38420688/89161667