ardrive CLI를 사용하여 수동으로 ardrive에 파일을 업로드하는 방법은 무엇입니까?

다음 게시물에서는 Arweave가 무엇인지, 지갑을 만드는 방법, CLI를 사용하여 수동으로 파일을 업로드하는 방법에 대해 설명합니다.

이 예에서는 unsplash에서 무료 이미지를 업로드할 것입니다.

알위브란?



Arweave website에 따르면 Arweave는 단일 선불 요금으로 데이터를 영구적이고 지속 가능하게 저장할 수 있는 프로토콜입니다.

IPFS의 대안으로 생각하시면 됩니다

Ardrive 을(를) 사용하면 파일을 업로드하고 공유할 수 있으며 저장하려는 데이터 양에 대해 지불할 금액을 알고 싶은 경우를 대비하여 fee calculator도 있습니다.

전제 조건



  • Node.js 설치됨
  • Arweave Wallet

  • Ardrive CLI 설치됨

  • 프로젝트 생성


  • 터미널을 열고 다음 명령을 입력합니다
  • .
  • mkdir ardrive-튜토리얼
  • cd ardive-tutorial
  • npm init --y
  • 선호하는 코드 편집기로 프로젝트 열기

  • 종속성


  • ardrive-core-js
  • dotenv
  • prompt-sync

  • 종속성을 설치하려면 프로젝트 폴더로 이동하여 터미널을 열고 다음을 입력하십시오.

    npm i ardrive-core-js dotenv prompt-sync
    


    import so openpackage.json을 사용하고 "type": "module"줄을 추가합니다.

    "type" : "module",
    "scripts": {
      "start": "node ./src index.js"
    },
    


    프로젝트 파일 구조




    arDrive-tutorial/
    ├── node_modules/
    ├── tutorial-images/
    ├── src/
    │   └── index.js
    ├── .env
    └── package.json
    


    목차


  • Log in to ArDrive
  • Uploading files to ArDrive
  • Uploading files with ArDrive CLI
  • Script to create a .json with files info
  • Conclusion



  • 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/
    
    1. We are going to import {readJWKFile, arDriveFactory} from 'ardrive-core-js' . we'll be able to read our wallet with readJWKFile and use arDrive operations with arDriveFactory -

    2. We are going to create a .json file at the end of our script so we need to use fs

    3. 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

    4. 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

    5. We will create a const foldersId = [] that will store every folder name and folder id

    6. Now 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
      })
    
    1. We will sort those files because we could obtain them unsorted

    2. Then we are going to create a const filesInformation = [] that will store the information of each one of the files per folder

    3. After 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

    4. 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

    5. 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에서 나를 추가할 수도 있습니다.

    시간 내 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기