问题描述:使用微信云开发http api 上传文件,微信返回错误码400,结果格式是xml:
<?xml version='1.0' encoding='utf-8' ?>MalformedPOSTRequest
The body of your POST request is not well-formed multipart/form-data. cos.ap-shanghai.myqcloud.com/6465-develop-0388d0-1258644315/test/test_1/userlist.csv NWRjMjg1OWFfZWFiYjFjMDlfMmI3NDdfY2M1NWQ4 OGVmYzZiMmQzYjA2OWNhODk0NTRkMTBiOWVmMDAxODc0OWRkZjk0ZDM1NmI1M2E2MTRlY2MzZDhmNmI5MWI1OTczMmZiNDZmZjBmNTVjMGU4NTViNDhhYWVjNzNkNzI4MzIyMTZjZTI0YWNhOTM4ZDlhNGM3NDA5MDQ1NjE3NTM=
过程和解决方法下文再表。
近一年来,想要弄个微信小游戏出来,但是苦于各种原因,总是断断续续,到现在还没有一个拿的出的作品。最近一段时间,看了微信云开发的相关文档,感觉有必要写个类库封装一下云Api,方便以后调用。于是就着手写了一个简单的调用库,过程中基本顺利。直到编写调用云存储,进行文件上传时,遇到了问题。而遍寻百度和谷歌,都没有找到相应的解决办法,所以想着把排错过程记录下来,以方便其他使用.net core 进行微信云开发的同学们进行讨论和参考。
笔者首先调用HTTP API的 uploadFile,成功的返回了数据,如图:
以下为微信官方的要求:
根据要求,代码实现如下(注意,下面这段代码不能正确上传,如果需要正确结果代码的,请拉到文末):
/// <summary>
/// 上传文件
/// </summary>
/// <param name="path">云路径</param>
/// <param name="fileBuff">二进制文件</param>
/// <returns></returns>
public BaseResult uploadFile(string path, byte[] fileBuff)
{
string resultContent = "";
try
{
//获取文件上传链接和验证信息
var uploadFilePathResult = getUploadFilePath(path);
using (HttpClient client = new HttpClient())
{
//client.BaseAddress = new Uri("http://localhost:52538/");
string boundary = "-----------" + DateTime.Now.Ticks.ToString("x");
var formContent = new MultipartFormDataContent(boundary);
formContent.Add(new StringContent(path), "\"key\"");
formContent.Add(new StringContent(uploadFilePathResult.authorization), "\"Signature\"");
formContent.Add(