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

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

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

Что такое Arweave?

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

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

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

Если вы хотите найти больше контента или вакансий, связанных с блокчейном, я рекомендую вам зарегистрироваться в Code&Jobs.

Пререквизиты

  • Установлен 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. аутентификация на ArDrivee

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

Имя пользователя и пароль используются для личных папок при предоставлении к ним общего доступа.

2. Загрузите файлы в ArDrive

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

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

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

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

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

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

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

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

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

Если он установлен, вы увидите сообщение, похожее на это.

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

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

Теперь мы создадим новый диск, для этого нам нужно указать путь, где находится наш файл Wallet, и имя, которое мы собираемся присвоить нашему диску.

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", а затем информация, которую мы ищем, находится в entityId.

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

Нам также нужно будет указать местоположение загружаемого файла или папки.

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:YOURWALLET_PATH.

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

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

driveName
├── imagesFolder/ //si queremos la información de imagesFolder entonces 
│   ├── folder1/  //debemos dar el folder id correspondiente
│   │   ├── 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} из 'ardrive-core-js'. readJWKFile позволит нам прочитать файл из нашего кошелька, а с помощью arDriveFactory мы сможем выполнять операции arDrive.

  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 = []



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, и как создать пользовательский сценарий для взаимодействия с загруженными файлами.

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

Если вы хотите найти больше контента или вакансий, связанных с блокчейном, я рекомендую вам войти и зарегистрироваться в Code&Jobs.

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

Я также оставляю вам своего пользователя Discord Appu#9136 на случай, если вы захотите добавить меня.

Большое спасибо за уделенное время.

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