使用wx.uploadFile(OBJECT)上传图片的问题
发布于 6 年前 作者 xiulancai 15819 次浏览 来自 问答

//客户端按照官方的说明

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#后台代码

 //遍历Request.Form对象

    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#写过,解决过,谢谢指教!

 

3 回复

java后台怎么获取这些参数啊

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); //图片文件保存字开发者服务器上

                             

            }

回到顶部