Как загружать файлы на ardrive вручную и с помощью ardrive CLI?

В следующем посте я расскажу, что такое Arweave, как создать кошелек, а также как загружать файлы вручную и с помощью CLI.

Для примера я загружу несколько бесплатных изображений с unsplash.

Что такое Arweave?

Согласно сайту Arweave, Arweave — это протокол, который позволяет хранить данные постоянно, устойчиво и за одну предоплату.

Его можно рассматривать как альтернативу IPFS.

С помощью Ardrive мы сможем загружать и обмениваться файлами, там также есть калькулятор платы, если вы хотите узнать, сколько вы заплатите за объем данных, которые хотите хранить.

Необходимые условия

  • Установленный Node.js
  • Кошелек Arweave
  • Установлен Ardrive CLI

Создание нашего проекта

  1. Откройте терминал и введите следующие команды
  2. mkdir ardrive-tutorial
  3. cd ardrive-tutorial
  4. npm init —y
  5. Откройте проект в удобном для вас редакторе кода

Зависимости

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

Для установки зависимостей перейдите в папку проекта, откройте терминал и введите следующее

npm i ardrive-core-js dotenv prompt-sync
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы будем использовать импорт, поэтому откройте 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
  2. Загрузка файлов в ArDrive
  3. Загрузка файлов с помощью ArDrive CLI
  4. Сценарий для создания .json с информацией о файлах
  5. Заключение

1. Войдите в ArDrive

Это несложно сделать, если вы создали свой кошелек, вы просто перейдете на страницу входа в Ardrive и войдете в систему со своим кошельком.

Пользователь и пароль предназначены для личных папок

2. Загрузка файлов в ArDrive

Помните, что все файлы будут храниться постоянно, то есть их нельзя будет удалить.

Первое, что мы сделаем, это создадим новый диск, нажав на кнопку New.

Затем зададим имя и выберем публичный или частный, я выберу публичный.

Затем мы снова нажмем кнопку New и на этот раз выберем «upload folder», потому что мы собираемся загрузить папку с файлами, как я уже говорил, в этом примере я буду использовать несколько бесплатных изображений с unsplash. Вы можете использовать все, что захотите, только убедитесь, что у вас есть разрешение на загрузку файлов.

Вы также сможете увидеть цену за загрузку этих файлов, так что вы сможете решить, хотите ли вы их загружать.

Теперь на диске появится новая папка, открыв которую, мы сможем увидеть файлы в ней, а также скачать их, получить подробную информацию о каждом файле, ссылку на предварительный просмотр и т. д.

3. Загрузка файлов с помощью ArDrive CLI

Чтобы получить больше информации о командах, которые можно использовать, введите ardrive -h или, если вам нужна более подробная информация об использовании команды ardrive create-drive -h.

Теперь мы собираемся повторить процесс, но используя вместо этого ardrive cli, поэтому первое, что мы сделаем, это откроем наш терминал и проверим, установлен ли ardrive CLI с помощью этой команды:

ardrive --version
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы должны получить версию вашего ardrive CLI.

1.19.0
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем мы собираемся создать новый диск, мы должны указать местоположение нашего кошелька и имя для нового диска, вы также можете указать, хотите ли вы, чтобы это был приватный диск с помощью -p

ardrive create-drive -w <YOURWALLETLOCATIONFOLDERwallet-file.json> -n cli-tut
Вход в полноэкранный режим Выйти из полноэкранного режима

Вы должны получить объект с информацией о диске и папке, как показано ниже:

{
  "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"
  }
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Затем мы собираемся загрузить в нее несколько файлов, если мы хотим загрузить их в корневую папку, нам нужно будет добавить entityId предыдущего объекта с "type": "folder", в любом случае, если вы откроете свой ardrive и найдете созданный вами диск, вы сможете получить id корневой папки следующим образом.

Нам также нужно местоположение файла или папки, которую мы хотим загрузить.

ardrive upload-file -w <YOURWALLETLOCATIONFOLDERwallet-file.json> --local-path <FILEORFOLDERLOCATIONTHATWANTTOUPLOAD> -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 <YOURWALLETLOCATIONFOLDERwallet-file.json> -f <folder-id>
Войти в полноэкранный режим Выйти из полноэкранного режима

4. Скрипт для создания .json с информацией о файлах

Теперь мы создадим пользовательский скрипт для получения информации о файлах и папках и, наконец, создадим .json файл, который будет полезен для реального проекта NFT.

Сначала создайте файл .env в корне вашего проекта и создайте переменную WALLET_PATH и добавьте путь к вашему кошельку следующим образом C:YOURWALLETPATH

Затем перейдите в папку src и откройте index.js, скопируйте и вставьте следующий код, не волнуйтесь, я объясню его шаг за шагом.

Я собираюсь использовать папку из нашего предыдущего примера, но вы также можете работать со структурой папок arDrive, как показано ниже.

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. Мы собираемся import {readJWKFile, arDriveFactory} from 'ardrive-core-js'. Мы сможем читать наш кошелек с помощью readJWKFile и использовать операции arDrive с помощью arDriveFactory-.

  2. Мы собираемся создать .json файл в конце нашего скрипта, поэтому нам нужно использовать fs.

  3. Сценарий попросит пользователя ввести ID папки, с ID папки мы можем получить все папки внутри этой папки, а также получить ID диска, который будет необходим для создания ссылки на папку.

  4. Нам нужно отсортировать папки, если их несколько и они имеют имя проекта, например (PROJECT_NAME_1, PROJECT_NAME_2, PROJECT_NAME_3 и т.д.), потому что, вероятно, мы не получим их отсортированными по умолчанию.

  5. Мы создадим const foldersId = [], который будет хранить имя каждой папки и ее идентификатор.

  6. Теперь мы будем использовать цикл for для перебора foldersId и получим файлы каждой папки с помощью

const getFiles = await arDrive.listPublicFolder({
    folderId: folderId
  })
Вход в полноэкранный режим Выйти из полноэкранного режима
  1. Мы отсортируем эти файлы, потому что мы могли бы получить их без сортировки.

  2. Затем мы создадим const filesInformation = [], который будет хранить информацию о каждом из файлов в папке.

  3. После этого мы будем использовать еще один цикл for, перебирая их внутри нашего текущего цикла. Таким образом, с помощью этого подхода мы получим всю информацию о файлах из текущей папки.

  4. Теперь мы сохраним имя папки, ссылку на папку, а также информацию о файлах (имя файла, идентификатор файла и ссылку на файл из предыдущего цикла), которая будет храниться в массиве Files.

  5. Наконец, мы создадим json-файл и запишем сохраненные данные в 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))
Вход в полноэкранный режим Выйти из полноэкранного режима

Окончательный результат будет выглядеть следующим образом:

[
  {
    "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. Заключение

Мы узнали, как загружать и обмениваться файлами с arDrive вручную и с помощью CLI, а также как создать пользовательский скрипт для взаимодействия с загруженными файлами.

Я очень надеюсь, что вы смогли следовать этому посту без каких-либо проблем, в противном случае я прошу прощения, пожалуйста, оставьте мне свои сомнения или комментарии.

Вы можете связаться со мной по telegram, если вам нужно нанять Full Stack разработчика.

Вы также можете добавить меня в Discord Appu#9136.

Спасибо за ваше время.

Оцените статью
devanswers.ru
Добавить комментарий