引言
之前我们已经说过了、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; }
以上是核心代码,依赖代码我上次到资源里面(也可私我发你)