//客户端按照官方的说明
wx.chooseImage({
success: function(res) {
var tempFilePaths = res.tempFilePaths
wx.uploadFile({
url: ‘https://xxx.com/xx.aspx’, //加密后开发者台服务器处理文件地址
filePath: tempFilePaths[0], //要上传文件资源的路径
name: ‘fileImage’, //文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
formData:{
“OpenID”: app.globalData.OpenID,
“picUrl”: tempFilePaths[0]
},
success: function(res){
var data = res.data
//do something
}
})
}
})
C#后台代码
for (int i = 0; i < Request.Form.Count; i++)
{
Response.Write( i.ToString() +":" + Request.Form.Keys[i].ToString());
}
只能获取formData中定义的参数:OpenID 和picUrl,fileImage 获取不到这个参数名。
官方文档中所谓“开发者在服务器端通过这个 key 可以获取到文件二进制内容”,现在key获取不到,有哪位大侠用C#写过,解决过,谢谢指教!
WCF的接口定义为:
[WebInvoke(Method = “POST”, UriTemplate = “wxUploadFile”, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string wxUploadFile(Stream stream);
用到的“using”包括:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
WCF的实施为:
public string wxUploadFile(Stream stream)
{
try
{
//分析类型
var contentType = WebOperationContext.Current.IncomingRequest.ContentType;
var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(contentType);
var mediaType = mediaTypeHeaderValue.MediaType;
if (mediaType != “multipart/form-data”)
throw new InvalidOperationException(“接入请求 content-type 必须使用 multipart/form-data”);
//转换形式
var streamContent = new StreamContent(stream);
streamContent.Headers.ContentType = mediaTypeHeaderValue;
//解析内容
var provider = streamContent.ReadAsMultipartAsync().Result;
foreach (var httpContent in provider.Contents)
{
var fileName = httpContent.Headers.ContentDisposition.FileName;
if (string.IsNullOrWhiteSpace(fileName))
{
var formValue = httpContent.ReadAsStringAsync().Result;
}
else
{
var fileStream= httpContent.ReadAsStreamAsync().Result;
}
}
return “success”;
}
catch (Exception e)
{
return “fail:” + e.Message;
}
}
呵呵,这个问题,通过找资料,自己解决 了,问题的关键 multipart/form-data,这个不是普通的表单提交,用Request.Form获取名称是不行的,应该用文件方式,下面吧相关代码贴出来(C#):
if (Request.RequestType == "POST")
{
HttpPostedFile postedFile = Request.Files["fileImages"]; //前端:文件对应的 key
string fileName;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
postedFile.SaveAs(Request.MapPath("~/Upload/") + fileName); //图片文件保存字开发者服务器上
}