日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

php小編蘋果為您帶來關(guān)于如何正確使用AnonFiles API發(fā)布文件的指南。AnonFiles API是一個(gè)強(qiáng)大的工具,可以幫助您快速、安全地上傳和分享文件。本指南將為您提供詳細(xì)的步驟和示例,幫助您輕松掌握API的使用方法。無論您是開發(fā)者還是普通用戶,都能從本指南中獲得實(shí)用的技巧和建議,讓您的文件分享體驗(yàn)更加順暢和高效。讓我們一起來探索AnonFiles API的魅力吧!

問題內(nèi)容

我正在嘗試創(chuàng)建一個(gè)函數(shù),使用 anonfiles api 在 anonfiles.com 網(wǎng)站上托管您的文件。即使我正確使用了 api,它總是返回 nil。 響應(yīng)缺少消息

func host(file string) {
    fileBytes, err := ioutil.ReadFile(file)
    if err != nil {
        fmt.Println("\033[1;31mCommand > Host: Could not read file,", err, "\033[0m")
        return
    }

    url := "https://api.anonfiles.com/upload"

    request, err := http.NewRequest("POST", url, bytes.NewBuffer(fileBytes))
    if err != nil {
        fmt.Println("\033[1;31mCommand > Host: Could not post request,", err, "\033[0m")
        return
    }

    request.Header.Set("Content-Type", "application/octet-stream")

    client := &http.Client{}
    response, err := client.Do(request)
    if err != nil {
        fmt.Println("\033[1;31mCommand > Host: Could not send request,", err, "\033[0m")
        return
    }
    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println("\033[1;31mCommand > Host: Could not read response,", err, "\033[0m")
        return
    }

    var result map[string]interface{}
    err = json.Unmarshal(body, &result)
    if err != nil {
        fmt.Println("\033[1;31mCommand > Host: Could not parse response,", err, "\033[0m")
        return
    }

    if response.StatusCode == 200 {
        if result["url"] == nil {
            fmt.Println("\033[1;31mCommand > Host: Response is missing URL\033[0m")
            return
        }
        fmt.Println("File hosted successfully:", result["url"].(string))
    } else {
        if result["message"] == nil {
            fmt.Println("\033[1;31mCommand > Host: Response is missing message\033[0m")
            return
        }
        fmt.Println("\033[1;31mCommand > Host:\033[0m", result["message"].(string))
    }
}

登錄后復(fù)制

解決方法

我想花點(diǎn)時(shí)間將這些評(píng)論擴(kuò)展為答案。

首先,正如我們已經(jīng)討論過的,您沒有使用正確的 api 來上傳文件。如果我們修改您的代碼以顯示完整的響應(yīng)正文,如下所示:

client := &http.client{}
response, err := client.do(request)
if err != nil {
  fmt.println("\033[1;31mcommand > host: could not send request,", err, "\033[0m")
  return
}
defer response.body.close()

body, err := ioutil.readall(response.body)
if err != nil {
  fmt.println("\033[1;31mcommand > host: could not read response,", err, "\033[0m")
  return
}

fmt.printf("body:\n%s\n", body)

登錄后復(fù)制

我們看到以下內(nèi)容:

{
  "status": false,
  "error": {
    "message": "no file chosen.",
    "type": "error_file_not_provided",
    "code": 10
  }
}

登錄后復(fù)制登錄后復(fù)制

我們收到此錯(cuò)誤是因?yàn)槟鷽]有在 multipart/form-data 請(qǐng)求中提供 file 參數(shù)。 我之前鏈接到的帖子有幾個(gè)示例發(fā)送多部分請(qǐng)求;我已經(jīng)測試了其中的幾個(gè),它們似乎按預(yù)期工作。

您還對(duì) api 返回的響應(yīng)做出了錯(cuò)誤的假設(shè)。如果我們使用 curl 發(fā)出成功的請(qǐng)求并捕獲響應(yīng) json,我們會(huì)發(fā)現(xiàn)它如下所示:

{
  "status": true,
  "data": {
    "file": {
      "url": {
        "full": "https://anonfiles.com/k8cdobwey7/test_txt",
        "short": "https://anonfiles.com/k8cdobwey7"
      },
      "metadata": {
        "id": "k8cdobwey7",
        "name": "test.txt",
        "size": {
          "bytes": 12,
          "readable": "12 b"
        }
      }
    }
  }
}

登錄后復(fù)制

請(qǐng)注意,沒有 response["url"]response["message"]。如果您想要上傳文件的url,則需要獲取response["data"]["file"]["url"]["full"](或["short"])。

同樣,我們可以看到上面的錯(cuò)誤響應(yīng)示例,如下所示:

{
  "status": false,
  "error": {
    "message": "no file chosen.",
    "type": "error_file_not_provided",
    "code": 10
  }
}

登錄后復(fù)制登錄后復(fù)制

這不是 result["message"];那是 result["error"]["message"]

因?yàn)槟饨M到 map[string] 接口 ,所以獲取這些嵌套鍵會(huì)有點(diǎn)痛苦。我發(fā)現(xiàn)為上述響應(yīng)創(chuàng)建 go 結(jié)構(gòu)是最簡單的,只需將其解組為適當(dāng)類型的變量即可。

這讓我得到以下類型:

type (
  anonfilesurl struct {
    full  string `json:"full"`
    short string `json:"short"`
  }

  anonfilesmetadata struct {
    id   string `json:"id"`
    name string `json:"name"`
    size struct {
      bytes    int    `json:"bytes"`
      readable string `json:"readable"`
    } `json:"size"`
  }

  anonfilesdata struct {
    file struct {
      url      anonfilesurl      `json:"url"`
      metadata anonfilesmetadata `json:"metadata"`
    } `json:"file"`
  }

  anonfileserror struct {
    message string
    type    string
    code    int
  }

  anonfilesresponse struct {
    status bool           `json:"status"`
    data   anonfilesdata  `json:"data"`
    error  anonfileserror `json:"error"`
  }
)

登錄后復(fù)制

然后解組響應(yīng)如下所示:

var result anonfilesresponse
err = json.unmarshal(body, &result)

登錄后復(fù)制

我們可以請(qǐng)求以下字段:

fmt.Printf("URL: %s\n", result.Data.File.URL.Full)

登錄后復(fù)制

分享到:
標(biāo)簽:overflow
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定