Discord bot从聊天框获取文件并转发

该代码片段展示了如何在开发Discord bot时设置HTTP代理下载国外网络上的图片,并通过POST请求将其转发到指定URL。关键步骤包括设置代理、验证内容类型为图片、读取响应体、创建POST请求并发送。注意,该功能适用于国内网络环境。
摘要由CSDN通过智能技术生成

在做discord bot开发时,有将discord聊天框中的图片下载袭来,并通过http转发出去的需求,以下是对应的代码,需要注意的是,因为是在国内网,通过http消息下载国外网络需要设置代理:

func uploadFile(token, fileUrl, name string) (string, error){
// 设置代理
	proxy := func(_ *http.Request) (*url.URL, error) {
		return url.Parse("http://127.0.0.1:7890")
	}

	transport := &http.Transport{Proxy: proxy}

	client := &http.Client{Transport: transport}
	resp, err := client.Get(fileUrl)

	fmt.Println(fileUrl)
	if err != nil {
		panic(err)
		return "", err
	}
	defer resp.Body.Close()
	contentType := resp.Header.Get("Content-Type")
	fmt.Println(contentType)
	if !strings.Contains(contentType, "image") {
		return "", errors.New("only support to upload images")
	}

//将下载到的文件写入buffer中并创建request
	bodyBuffer := &bytes.Buffer{}
	bodyWriter := multipart.NewWriter(bodyBuffer)

	fileWriter, _ := bodyWriter.CreateFormFile("file", name)
	io.Copy(fileWriter, resp.Body)

	contentType1 := bodyWriter.FormDataContentType()
	bodyWriter.Close()

	req, _ := http.NewRequest("POST", viper.GetString("fileUploadUrl"), bodyBuffer)
	fmt.Println(req)

	req.Header.Add("Authorization", "Bearer " + token)
	req.Header.Add("content-type", contentType1)
	fmt.Println(contentType1)
	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		return "", err
	}

	var t models.UploadFilesResponse

	err = json.Unmarshal(body, &t)
	if err != nil {
		return "", err
	}

	fmt.Println(t.FileUrl)

	return t.FileUrl, nil
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值