微信小程序实现图片上传功能


Posted in Javascript onMay 28, 2018

本文实例为大家分享了微信小程序实现图片上传功能的具体代码,供大家参考,具体内容如下

前端:微信开发者工具

后端:.Net

服务器:阿里云

这里介绍微信小程序如何实现上传图片到自己的服务器上

前端代码

data: { 
 productInfo: {} 
}, 
//添加Banner 
bindChooiceProduct: function () { 
 var that = this; 
 
 wx.chooseImage({ 
  count: 3, //最多可以选择的图片总数 
  sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有 
  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 
  success: function (res) { 
   // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 
   var tempFilePaths = res.tempFilePaths; 
   //启动上传等待中... 
   wx.showToast({ 
    title: '正在上传...', 
    icon: 'loading', 
    mask: true, 
    duration: 10000 
   }) 
   var uploadImgCount = 0; 
   for (var i = 0, h = tempFilePaths.length; i < h; i++) { 
    wx.uploadFile({ 
     url: util.getClientSetting().domainName + '/home/uploadfilenew', 
     filePath: tempFilePaths[i], 
     name: 'uploadfile_ant', 
     formData: { 
      'imgIndex': i 
     }, 
     header: { 
      "Content-Type": "multipart/form-data" 
     }, 
     success: function (res) { 
      uploadImgCount++; 
      var data = JSON.parse(res.data); 
      //服务器返回格式: { "Catalog": "testFolder", "FileName": "1.jpg", "Url": "https://test.com/1.jpg" } 
      var productInfo = that.data.productInfo; 
      if (productInfo.bannerInfo == null) { 
       productInfo.bannerInfo = []; 
      } 
      productInfo.bannerInfo.push({ 
       "catalog": data.Catalog, 
       "fileName": data.FileName, 
       "url": data.Url 
      }); 
      that.setData({ 
       productInfo: productInfo 
      }); 
 
      //如果是最后一张,则隐藏等待中 
      if (uploadImgCount == tempFilePaths.length) { 
       wx.hideToast(); 
      } 
     }, 
     fail: function (res) { 
      wx.hideToast(); 
      wx.showModal({ 
       title: '错误提示', 
       content: '上传图片失败', 
       showCancel: false, 
       success: function (res) { } 
      }) 
     } 
    }); 
   } 
  } 
 }); 
}

后端上传代码(将文件上传到服务器临时文件夹内)

[HttpPost] 
public ContentResult UploadFileNew() 
{ 
  UploadFileDTO model = new UploadFileDTO(); 
  HttpPostedFileBase file = Request.Files["uploadfile_ant"]; 
  if (file != null) 
  { 
    //公司编号+上传日期文件主目录 
    model.Catalog = DateTime.Now.ToString("yyyyMMdd"); 
    model.ImgIndex = Convert.ToInt32(Request.Form["imgIndex"]); 
 
    //获取文件后缀 
    string extensionName = System.IO.Path.GetExtension(file.FileName); 
 
    //文件名 
    model.FileName = System.Guid.NewGuid().ToString("N") + extensionName; 
 
    //保存文件路径 
    string filePathName = System.IO.Path.Combine(CommonHelper.GetConfigValue("ImageAbsoluteFolderTemp"), model.Catalog); 
    if (!System.IO.Directory.Exists(filePathName)) 
    { 
      System.IO.Directory.CreateDirectory(filePathName); 
    } 
    //相对路径 
    string relativeUrl = CommonHelper.GetConfigValue("ImageRelativeFolderTemp"); 
    file.SaveAs(System.IO.Path.Combine(filePathName, model.FileName)); 
 
    //获取临时文件相对完整路径 
    model.Url = System.IO.Path.Combine(relativeUrl, model.Catalog, model.FileName).Replace("\\", "/"); 
  } 
  return Content(Newtonsoft.Json.JsonConvert.SerializeObject(model)); 
}
/// <summary> 
/// 上传文件 返回数据模型 
/// </summary> 
public class UploadFileDTO 
{ 
  /// <summary> 
  /// 目录名称 
  /// </summary> 
  public string Catalog { set; get; } 
  /// <summary> 
  /// 文件名称,包括扩展名 
  /// </summary> 
  public string FileName { set; get; } 
  /// <summary> 
  /// 浏览路径 
  /// </summary> 
  public string Url { set; get; } 
  /// <summary> 
  /// 上传的图片编号(提供给前端判断图片是否全部上传完) 
  /// </summary> 
  public int ImgIndex { get; set; } 
}
#region 获取配置文件Key对应Value值 
/// <summary> 
/// 获取配置文件Key对应Value值 
/// </summary> 
/// <param name="key"></param> 
/// <returns></returns> 
public static string GetConfigValue(string key) 
{ 
  return ConfigurationManager.AppSettings[key].ToString(); 
} 
#endregion

设置配置文件上传文件对应的文件夹信息

<appSettings> 
 <!--图片临时文件夹 绝对路径--> 
 <add key="ImageAbsoluteFolderTemp" value="D:\Images\temp" /> 
 <!--图片正式文件夹 绝对路径--> 
 <add key="ImageAbsoluteFolderFinal" value="D:\Images\product" /> 
 
 <!--图片临时文件夹 相对路径--> 
 <add key="ImageRelativeFolderTemp" value="http://192.168.1.79:9009/temp"/> 
 <!--图片正式文件夹 相对路径--> 
 <add key="ImageRelativeFolderFinal" value="http://192.168.1.79:9009/product"/> 
</appSettings>

PS:上传到服务器的临时文件夹内,当用户点击保存才把这些文件移动到正式目录下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery EasyUI NumberBox(数字框)的用法
Jul 08 Javascript
基于jQuery的树控件实现代码(asp.net+json)
Jul 11 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
May 09 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
实现高性能javascript的注意事项
May 27 Javascript
vue路由插件之vue-route
Jun 13 Javascript
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
微信小程序上传图片功能(附后端代码)
Jun 19 #Javascript
讲解vue-router之什么是编程式路由
May 28 #Javascript
讲解vue-router之什么是嵌套路由
May 28 #Javascript
微信小程序上传图片实例
May 28 #Javascript
讲解vue-router之什么是动态路由
May 28 #Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 #Javascript
微信小程序实现上传图片功能
May 28 #Javascript
You might like
解析php中array_merge与array+array的区别
2013/06/21 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
python GUI实例学习
2017/11/21 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python批量修改xml属性的实现方式
2020/03/05 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
《雾凇》教学反思
2014/02/17 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
vue实现拖拽交换位置
2022/04/07 Vue.js