1

I am using Pinata to upload files in Go to a private gateway using its submarine feature; while it works well, I am wondering how to pin a directory instead. The documentation says it is "identically to pinning a file, with the main difference being an array of files and need to provide a relative file path for each file in the directory". How can I tweak my current Go code to work for a directory.

package ipfs

import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "mime/multipart"
    "net/http"
    "os"
    "path/filepath"
)

func PinFile(filePath string, fileName string) {

        //set pinata url for file pinning
    url := "https://managed.mypinata.cloud/api/v1/content"

    //init method and payload
    method := "POST"
    payload := &bytes.Buffer{}
    writer := multipart.NewWriter(payload)
    file, errFile1 := os.Open(filePath)

    defer file.Close()

    part1, errFile1 := writer.CreateFormFile("files", filepath.Base(filePath))

    _, errFile1 = io.Copy(part1, file)

    if errFile1 != nil {
        fmt.Println(errFile1)
        return
    }

    //set additional pinata option
    _ = writer.WriteField("name", "fileName")
    _ = writer.WriteField("metadata", "{\"keyvalues\": { \"app\": \"...\" }}")
    _ = writer.WriteField("wrapWithDirectory", "false")
    _ = writer.WriteField("pinToIPFS", "false")

    //close writer if error
    err := writer.Close()

    if err != nil {
        fmt.Println(err)
        return
    }

    client := &http.Client{}

    //set new request
    req, err := http.NewRequest(method, url, payload)

    if err != nil {
        fmt.Println(err)
        return
    }

    // set Submarine Key
    req.Header.Add("x-api-key", env.GetEnv["SUBMARINE_KEY"])

    //add content type to request header
    req.Header.Set("Content-Type", writer.FormDataContentType())

    res, err := client.Do(req)

    if err != nil {
        fmt.Println(err)
        return
    }

    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)

    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(body))
}
mev
  • 177
  • 5

0 Answers0