ardrive CLI를 사용하여 수동으로 ardrive에 파일을 업로드하는 방법은 무엇입니까?
이 예에서는 unsplash에서 무료 이미지를 업로드할 것입니다.
알위브란?
Arweave website에 따르면 Arweave는 단일 선불 요금으로 데이터를 영구적이고 지속 가능하게 저장할 수 있는 프로토콜입니다.
IPFS의 대안으로 생각하시면 됩니다
Ardrive 을(를) 사용하면 파일을 업로드하고 공유할 수 있으며 저장하려는 데이터 양에 대해 지불할 금액을 알고 싶은 경우를 대비하여 fee calculator도 있습니다.
전제 조건
Node.js 설치됨
Ardrive CLI 설치됨
프로젝트 생성
종속성
종속성을 설치하려면 프로젝트 폴더로 이동하여 터미널을 열고 다음을 입력하십시오.
npm i ardrive-core-js dotenv prompt-sync
import so open
package.json
을 사용하고 "type": "module"줄을 추가합니다."type" : "module",
"scripts": {
"start": "node ./src index.js"
},
프로젝트 파일 구조
arDrive-tutorial/
├── node_modules/
├── tutorial-images/
├── src/
│ └── index.js
├── .env
└── package.json
목차
1. ArDrive에 로그인
This is not difficult to do, assuming that you created your wallet, you just go to Ardrive login page , 지갑으로 로그인합니다.사용자 및 암호는 개인 폴더용입니다.
2. ArDrive에 파일 업로드
Remember that all the files will be permanently stored, that means that the files cannot be deleted.
The first thing that we will do is create a new drive by clicking on the New button
그런 다음 이름을 설정하고 공개 또는 비공개 중에서 선택합니다. 저는 공개를 선택하겠습니다.
그런 다음 새로 만들기 버튼을 다시 클릭하고 이번에는 파일이 있는 폴더를 업로드할 것이기 때문에 "폴더 업로드"를 선택합니다. 이 예에서 이전에 언급한 것처럼 unsplash의 무료 이미지를 사용할 것입니다. . 원하는 것을 사용할 수 있습니다. 파일을 업로드할 수 있는 권한이 있는지 확인하세요.
또한 해당 파일을 업로드하는 데 드는 가격을 볼 수 있으므로 업로드 여부를 결정할 수 있습니다.
이제 드라이브에서 새 폴더를 볼 수 있으며 폴더를 열면 그 안에 있는 파일을 볼 수 있고 다운로드할 수 있으며 각 파일의 세부 정보, 미리 보기 링크 등을 얻을 수 있습니다.
3. ArDrive CLI로 파일 업로드
To get more info about the commands that can be used type ardrive -h
or in case you want more usage information about a command ardrive create-drive -h
Now we are going to repeat the process but using ardrive cli instead, so the first thing that we are going to do is open our terminal and check if the ardrive CLI is installed with this command:
ardrive --version
You should get your ardrive CLI version.
1.19.0
Then we are going to create a new drive, we must specify our wallet location and a name for the new drive, you can also specify if you want it to be a private drive with -p
ardrive create-drive -w <YOUR\WALLET\LOCATION\FOLDER\wallet-file.json> -n cli-tut
You should get an object with information about the drive and the folder like the following one:
{
"created": [
{
"type": "drive",
"metadataTxId": "0fzTAOPqIK4Imk2xGf3e9CDCXxO_k-xFFlOkAA-IXRg",
"entityId": "5e219c5e-ed6a-497d-b225-b5d621eed097",
"bundledIn": "GL725mzIbYgisddpaimoxs6lAdN9CjASmhhxqdP3agk",
"entityName": "cli-tut"
},
{
"type": "folder",
"metadataTxId": "LGeONqTaoiE1m6_OXK2RcmsBZbkN0yxl-AKNUEn4ahs",
"entityId": "1739f7e2-baa2-491a-a2ab-f406d778041a",
"bundledIn": "GL725mzIbYgisddpaimoxs6lAdN9CjASmhhxqdP3agk",
"entityName": "cli-tut"
},
{
"type": "bundle",
"bundleTxId": "GL725mzIbYgisddpaimoxs6lAdN9CjASmhhxqdP3agk"
}
],
"tips": [],
"fees": {
"GL725mzIbYgisddpaimoxs6lAdN9CjASmhhxqdP3agk": "52221667"
}
}
Then we are going to upload some files to it, if we want upload them to the root folder we will need to add the entityId
of the previous object with "type": "folder"
, anyways if you open your ardrive and look for the drive that you created you can get the root folder id like this.
업로드할 파일 위치 또는 폴더 위치도 필요합니다.
ardrive upload-file -w <YOUR\WALLET\LOCATION\FOLDER\wallet-file.json> --local-path <FILE\OR\FOLDER\LOCATION\THAT\WANT\TO\UPLOAD> -F <folder-id>
다음과 같은 메시지를 받게 됩니다.
{
"created": [
{
"type": "folder",
"entityId": "4de053e3-cf7f-4da6-88bc-e238e7478226",
"metadataTxId": "rhML7VdZDfm2R1sASWwiCVt-_eeGb38VOFMUOszgvlM",
"bundledIn": "CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4",
"entityName": "ardrive-cli-files",
},
{
"type": "file",
"entityName": "1.jpg",
"entityId": "6cb92418-bf77-4edd-a271-a4981abb92bc",
"dataTxId": "8y5PVi1V2WAF4etKv0lgbfx2tO2P_ekDu7PBFjhu4us",
"metadataTxId": "LD2QI5erLPuvM39ptN0-G9vpLEGh4VXIdglhzS_oHEI",
"bundledIn": "CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4",
},
{
"type": "file",
"entityName": "2.jpg",
"entityId": "48c33090-a7e6-47d3-b974-924a09defbb4",
"dataTxId": "oMEPmy2LIKL0RI2WSfMyT3XEo2aZ86zqDQrEcfteqVo",
"metadataTxId": "m3cDLllbgTwg4rlKF_FivP5nSHRd7BZ9WIUY31NVlxE",
"bundledIn": "CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4",
"sourceUri": "file://C:\\Users\\Rob\\Downloads\\ardrive-cli-files\\2.txt"
},
{
"type": "bundle",
"bundleTxId": "CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4"
}
],
"tips": [
{
"recipient": "aVHpFhSorIljeZ9so8unOEnPkW3YqRbqG5cfM4aXxBI",
"txId": "CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4",
"winston": "10000000"
}
],
"fees": {
"CjI3RTkum17KI5GHEiI6dC_gjq1dznylrA4pR5hk0E4": "52221667"
}
}
보시다시피 새 폴더가 생성되었고 두 개의 파일도 함께 생성되었습니다.
이제 다음 명령을 사용하여 해당 폴더를 다운로드할 수 있습니다(현재 콘솔 위치에 다운로드됨).
ardrive download-folder -w <YOUR\WALLET\LOCATION\FOLDER\wallet-file.json> -f <folder-id>
4. 파일 정보로 .json을 생성하는 스크립트
Now we are going to create a custom script to get files and folder information and finally create a .json file with it that would be helpful for a real life NFT project
First create a .env
file in the root of your project and create a WALLET_PATH
variable and add your wallet path like this C:\\YOUR\\WALLET\\PATH
Then go to src
folder and open index.js
, copy and paste the following code, don't worry I will explain it step by step
I am going to use a folder form our previous example, but you can also work for a folder arDrive structure like this
driveName
├── imagesFolder/ //if we want imagesFolder info then we should provide this folder id
│ ├── folder1/
│ │ ├── 0.jpg
│ │ └── 1.jpg
│ ├── folder2/
│ │ ├── 2.jpg
│ │ └── 3.jpg
│ ├── folder3/
│ │ ├── 4.jpg
│ │ └── 5.jpg
│ ├── folder4/
│ │ ├── 6.jpg
│ │ └── 7.jpg
│ └── folder5/
│ ├── 8.jpg
│ └── 9.jpg
├── metadatasFolder/
└── anotherFolder/
We are going to
import {readJWKFile, arDriveFactory} from 'ardrive-core-js'
. we'll be able to read our wallet withreadJWKFile
and use arDrive operations witharDriveFactory
-We are going to create a .json file at the end of our script so we need to use
fs
The script will prompt the user for the folder ID, with the folder ID we can get all folders inside that folder and we can also get the drive ID that will be needed to build the link to the folder
We need sort the folders in case there are more than one and have a project name e.g. (PROJECT_NAME_1, PROJECT_NAME_2, PROJECT_NAME_3, etc) because probably we won't get them sorted by default
We will create a
const foldersId = []
that will store every folder name and folder idNow we will use a for loop to loop through foldersId and will get the files of each folder with
const getFiles = await arDrive.listPublicFolder({
folderId: folderId
})
We will sort those files because we could obtain them unsorted
Then we are going to create a
const filesInformation = []
that will store the information of each one of the files per folderAfter that we are going to use another for loop trough them inside our current loop, So with this approach we will get all the files info from the current folder
Now we will store the folderName, folderLink, and also the filesInformation (fileName, fileId, and fileLink from the previous loop) and will be stored in a Files array
Finally we will create a json file and we will write the stored data in Files
import {readJWKFile, arDriveFactory} from 'ardrive-core-js'
import fs from 'fs'
import dotenv from 'dotenv'
dotenv.config({path: '../.env'})
import ps from "prompt-sync";
const prompt = ps()
//read wallet from file
const myWallet = readJWKFile(process.env.WALLET_PATH)
const arDrive = arDriveFactory({ wallet: myWallet })
const folderID = prompt("insert the folder id ")
const getFolders = await arDrive.listPublicFolder({
folderId: folderID
})
const driveId = getFolders[0].driveId
const LINK_TO_FOLDERS = `https://app.ardrive.io/#/drives/${driveId}/folders/`
getFolders.sort((a, b) => {
return a.name.localeCompare(b.name)
})
const foldersId = []
getFolders.forEach(folder => {
foldersId.push({
folderName: folder.name,
folderId: folder.folderId.entityId
})
})
const Files = []
for (let i = 0; i < foldersId.length; i++) {
const folderId = foldersId[i].folderId
const folderName = foldersId[i].folderName
const getFiles = await arDrive.listPublicFolder({
folderId: folderId
})
//create an array for eachFoldername
const filesInformation = []
// Format here
getFiles.sort((a, b) => {
return a.name.localeCompare(b.name)
})
for (let j = 0; j < getFiles.length; j++) {
const file = getFiles[j]
filesInformation.push({
fileName: file.name,
fileId: file.fileId.entityId,
fileLink:'https://arweave.net/'+file.dataTxId.transactionId
})
}
Files.push({
folderName,
folderLink: LINK_TO_FOLDERS + folderId,
filesInformation
})
}
fs.writeFileSync(`filesInfo.json`, JSON.stringify(Files))
The final output will be similar to this:
[
{
"folderName": "arweave-images",
"folderLink": "https://app.ardrive.io/#/drives/5791d389-438c-4af5-820f-a2fe0fb782a8/folders/3d124a11-ebb5-4c2e-9d2c-02d6f1700b4b",
"filesInformation": [
{
"fileName": "1.jpg",
"fileId": "b2ca111f-54c5-4515-b700-e055c3a4e7c1",
"fileLink": "https://arweave.net/SrERAlYcB1v8D6ABRkP_QbHfRR6RdKTO3akSghPz3dM"
},
{
"fileName": "2.jpg",
"fileId": "2e791441-9404-4211-b618-2e580e110a15",
"fileLink": "https://arweave.net/fsnAIp1VFBMqBhNYsejaI5BqqOuUNat0gnUE2CHevqY"
},
{
"fileName": "3.jpg",
"fileId": "1c40d120-fe1d-4394-93e3-f9df3bf0f176",
"fileLink": "https://arweave.net/mSgGn1D_WPudzm0uROiJxegbZ760rhSNI8p5DGiy7hI"
}
]
}
]
5. 결론
We have learned how to upload and share files with arDrive manually and with the CLI, also how to create a custom script to interact with the files uploaded
I really hope you have been able to follow the post without any trouble, otherwise I apologize, please leave me your doubts or comments.
You can contact me by telegram if you need to hire a Full Stack developer.Discord Appu#9136에서 나를 추가할 수도 있습니다.
시간 내 주셔서 감사합니다.
Reference
이 문제에 관하여(ardrive CLI를 사용하여 수동으로 ardrive에 파일을 업로드하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rtagliavia/how-to-upload-files-to-ardrive-manually-and-with-ardrive-cli-1ggc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)