收藏
回答

使用wx.uploadFile(OBJECT)上传图片的问题

问题模块
API和组件


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

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

      


最后一次编辑于  2017-04-09  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 门徒
    门徒
    2017-08-26

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

    2017-08-26
    赞同
    回复
  • 赵龙博
    赵龙博
    2017-05-26

    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;

                }

            }



    2017-05-26
    赞同
    回复
  • 东舟科技
    东舟科技
    2017-04-09

    呵呵,这个问题,通过找资料,自己解决 了,问题的关键 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); //图片文件保存字开发者服务器上

                                 

                }


    2017-04-09
    赞同
    回复