以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于上传pdf文件到微信小程序的云存储里面  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=170252)

--  作者:lemonkashi
--  发布时间:2021/7/18 19:05:00
--  关于上传pdf文件到微信小程序的云存储里面
老师好
工作中在做小程序开发 需要我们网站的pdf文件传到小程序的云存储空间里面。
遇到的问题是调用上传接口第一步成功了 应该是在进行第二步才能在云存储空间中显示 但是第二步 现在搞不定了 所以请教老师
调用微信接口文件链接如下:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/storage/uploadFile.html

CSDN 博客参考文章    通过python 实现的例子

https://blog.csdn.net/weixin_42776828/article/details/104581180

涉及到要将文件转成二进制  这个有点搞不定了。
以下是我第一步 调用的代码  调用成功
Dim url As String = "https://api.weixin.qq.com/tcb/uploadfile?access_token={0}"
Dim txtInfo As WinForm.TextBox = e.Form.Controls("txtInfo")
Dim hc As New HttpClient(CExp(url, Functions.Execute("GetAccessToken")))
Dim jo As New JObject()
jo("env") = "rainkeji_e0jcd3239b6"
jo("path") = "D:/WorkStation/3232.pdf"
hc.Content = jo.ToString()
jo = JObject.Parse(hc.GetData)


参考上面第二个链接的意思还需要在请求一次才可以  第二次请求的方式有点不会写了.涉及传两个参数和文件转换成二进制。


谢谢老师

--  作者:有点蓝
--  发布时间:2021/7/18 21:20:00
--  
参考:http://www.foxtable.com/mobilehelp/topics/0161.htm

Dim url As String = "https://api.weixin.qq.com/tcb/uploadfile?access_token={0}"
Dim txtInfo As WinForm.TextBox = e.Form.Controls("txtInfo")
Dim hc As New HttpClient(CExp(url, Functions.Execute("GetAccessToken")))
Dim jo As New JObject()
jo("env") = "rainkeji_e0jcd3239b6"
jo("path") = "云存储空间路径"
hc.Content = jo.ToString()
jo = JObject.Parse(hc.GetData)

hc = New HttpClient(jo("url").ToString())
hc.FormData.Add("key","云存储空间路径")
hc.FormData.Add("Signature",jo("authorization").ToString())
hc.FormData.Add("x-cos-security-token",jo("token").ToString())
hc.FormData.Add("x-cos-meta-fileid",jo("cos_file_id").ToString())
hc
.Files.Add("file","D:/WorkStation/3232.pdf")
Dim ret As String = hc.getData()
msgbox(ret)

--  作者:lemonkashi
--  发布时间:2021/7/19 10:52:00
--  
老师好:

服务器 返回的 是  远程服务器返回错误: (403) 已禁止。

是不是因为 hc.Files.Add("file","D:/WorkStation/3232.pdf") 传的不是本地文件的二进制数据啊


谢谢

--  作者:lemonkashi
--  发布时间:2021/7/19 10:53:00
--  

用户获取到返回数据后,需拼装一个 HTTP POST 请求,其中 url 为返回包的 url 字段,Body 部分格式为 multipart/form-data,具体内容如下:

keyvalue说明
keythis/is/a/example/file.path请求包中的 path 字段
Signatureq-sign-algorithm=sha1&q-ak=AKID9...返回数据的 authorization 字段
x-cos-security-tokenCukha70zkXIBqkh1Oh...返回数据的 token 字段
x-cos-meta-fileidHDze32/qZENCwWi5...返回数据的 cos_file_id 字段
file文件内容文件的二进制内容

--  作者:有点蓝
--  发布时间:2021/7/19 11:11:00
--  
hc.Files.Add方法会自己转换为二进制数据的

或者试试

hc = New HttpClient(jo("url").ToString())
hc.ContentType = "application/x-www-form-urlencoded"
hc.FormData.Add("key","云存储空间路径")
hc.FormData.Add("Signature",jo("authorization").ToString())
hc.FormData.Add("x-cos-security-token",jo("token").ToString())
hc.FormData.Add("x-cos-meta-fileid",jo("cos_file_id").ToString())
hc
.FormData.Add("file",System.IO.File.ReadAllBytes("D:/WorkStation/3232.pdf"))
Dim ret As String = hc.getData()
msgbox(ret)

--  作者:lemonkashi
--  发布时间:2021/7/19 11:54:00
--  
这个是报错截图
图片点击可在新窗口打开查看此主题相关图片如下:下载.png
图片点击可在新窗口打开查看

--  作者:lemonkashi
--  发布时间:2021/7/19 13:25:00
--  
已经解决了  谢谢了老师 

问题处在云存储路径前部 不应该加 /

--  作者:lemonkashi
--  发布时间:2021/7/19 13:28:00
--  
贴出来吧  供大家参考  谢谢老师

Dim url As String = "https://api.weixin.qq.com/tcb/uploadfile?access_token={0}"
Dim hc As New HttpClient(CExp(url, Functions.Execute("GetAccessToken")))
Dim jo As New JObject()
jo("env") = "rainkeji_e0jcd3239b6"
jo("path") = "PDF/32321.pdf"
hc.Content = jo.ToString()
jo = JObject.Parse(hc.GetData)


hc = New HttpClient(jo("url").ToString())
hc.FormData.Add("key","PDF/32321.pdf")
hc.FormData.Add("Signature",jo("authorization").ToString())
hc.FormData.Add("x-cos-security-token",jo("token").ToString())
hc.FormData.Add("x-cos-meta-fileid",jo("cos_file_id").ToString())
hc.Files.Add("file","D:\\PDF\\32321.pdf")