原文地址:http://blog.csdn.net/sk719887916/article/details/54312573

微信小程序,图片上传,应用地方-修改用户信息的头像。

详细代码:

小程序的wxml代码

<view class="xd-container">
<form bindsubmit="bindSaveTap">
<image class="xd-img-user1" catchtap="chooseImageTap" src="{{logo}}"></image>
<view class="xd-view-section">
<text class="xd-abs xd-flex-left xd-text-nick">昵称</text>
<input name="nick_name" placeholder="请输入昵称" class="xd-input" value="{{userInfo.user_name}}"/>
</view>
<view class="xd-view-section1">
<text class="xd-abs xd-flex-left xd-text-nick">宝宝性别</text>
<radio-group class="xd-abs xd-radio-group" name="baby_sex">
<label class="xd-label-radio" wx:for="{{sex_items}}" wx:key="item">
<radio color="#3cc975" value="{{item.name}}" wx:if="{{item.name==userInfo.baby_sex}}" checked="true"/>
<radio color="#3cc975" value="{{item.name}}" wx:else checked="false"/>
<text class="xd-radio-text">{{item.value}}</text>
</label>
</radio-group>
</view>
<view class="xd-view-section1">
<text class="xd-abs xd-flex-left xd-text-nick">宝宝年龄</text>
<input placeholder="请输入年龄" wx:if="{{userInfo.baby_age != 0}}" value="{{userInfo.baby_age}}" class="xd-input"/>
<input name="baby_age" placeholder="请输入年龄" wx:else value="" class="xd-input"/>
</view>
<button size="default" class="xd-abs xd-subBtn" formType="submit" hover-class="xd-subBtn-hover">保存</button>
</form>
</view>

小程序对应的js代码

var util = require('../../../utils/util.js')
var app = getApp()
Page({
data: {
  sex_items: [
  {name:'1', value:'小王子'},
  {name:'2', value:'小公主'},
  {name:'0', value:'尚无'}
  ],
  logo:null,
  userInfo: {}
 },
//事件处理函数
bindViewTap: function() {
   wx.navigateTo({
  // url: '../logs/logs'
   // url: '../load/load'
})
},
onLoad: function () {
    console.log('onLoad')
    var that = this
    //调用应用实例的方法获取全局数据
    app.getUserInfo(function(userInfo){
    //更新数据
    console.log(userInfo);
    that.setData({
     userInfo:userInfo,
     logo:userInfo.logo
     })
    })
},
bindSaveTap: function(e){
    console.log(e)
    var formData = {
    uid:util.getUserID(),
    user_name:e.detail.value.nick_name,
    baby_sex:e.detail.value.baby_sex,
    baby_age:e.detail.value.baby_age
    }
   console.log(formData)
    app.apiFunc.upload_file(app.apiUrl.modify_user, this.data.logo, 'photos', formData,
    function(res){
    console.log(res);
    },
    function(){
    })
},
 //用来显示一个选择图片和拍照的弹窗,用到了微信的一个页面交互的api showActionSheet 
chooseImageTap: function(){
    let _this = this;
    wx.showActionSheet({
    itemList: ['从相册中选择', '拍照'],
    itemColor: "#f7982a",
    success: function(res) {
    if (!res.cancel) {
    if(res.tapIndex == 0){
    _this.chooseWxImage('album')
    }else if(res.tapIndex == 1){
    _this.chooseWxImage('camera')
    }
    }
    }
    })
},
//主要是用来选择图片以及接收图片路径回调的监听
chooseWxImage:function(type){
   let _this = this;
   wx.chooseImage({
    sizeType: ['original', 'compressed'],
    sourceType: [type],
    success: function (res) {
    console.log(res);
    _this.setData({
    logo: res.tempFilePaths[0],
    })
    }
  })
}
})

上传:

在chooseWxImage方法的success回调中我们可以看到,我把返回的图片路径res.tempFilePaths[0]赋值给logo,下面只需要调用upload方法就可以了。

封装好的upload_file方法。

//上传文件
function upload_file(url,filePath,name,formData,success,fail){
  console.log('a='+filePath);
  wx.uploadFile({
    url:rootUrl+url,
    filePath:filePath,
    name:name,
    header:{
      'content-type':'nultipart/form-data'
    },
    formData:formData, //http请求中其他额外的form data
    success: function(res){
      console.log(res);
      if(res.statusCode == 200 && !res.data.result_code){
         typeof success == "function" && success(res.data);
      }else{
        typeof fail == "function" && fail(res);
      }
    },
    fail: function(res){
      console.log(res);
      typeof fail == "function" && fail(res);
    }
  })
}

filePath就是upload_file中我们传进来的logo变量,也就是图片的绝对路径。

服务器接收图片的代码

if(!empty($_FILES['photos'])){
  $up_arr['logo'] = upload_logo('photos','manage/images/user','logo',$user_id,0);
  $up_arr['logo'] = $up_arr['logo'][0];
  $user_info['logo'] = $Server_Http_Path.$up_arr['logo'];
}

核心方法在upload_log中。

图片接收保存代码

if( !function_exists('upload_logo')){
  function upload_logo( $key_name='photos',$logo_path='manage/images/nurse',$pre_name='logo',$salt='20160101',$encode=1,$make=0 ){
    $result_arr = array();
    global $Server_Http_Path,$App_Error_Conf;
    //分文件夹保存
    $date_info = getdate();
    $year = $date_info['year'];
    $mon = $date_info['mon'];
    $day = $date_info['day'];
    $logo_path = sprintf("%s%s%s%s",$logo_path,$year,$mon,$day);
    if(!is_dir($logo_path)){
      $res = mkdir($logo_path,0777,true);
    }
    //图片上传
    foreach($photos as $key => $photo){
      $photo = $_FILES['photos'];
      $name = $key_name;
      $file_id = Input::file($name);
      if(!empty($file_id) && $file_id -> isValid()){
        $entension = $file_id -> getClientOriginalExtension();
if($pre_name == 'baby'){
$new_name = $pre_name . "_" . intval($salt) ."_" .time() . "_" . salt_rand(2,2);
}else {
$new_name = $pre_name . "_" . intval($salt) ."_" . salt_rand(2,2);
}
$path_id = $file_id -> move($logo_path,$new_name."_b.".$entension);
if(!empty($path_id)){
$path_name = $path_id->getPathName();
$image_size=getimagesize($path_name);
              $weight=$image_size["0"];
$height=$image_size["1"];
//获取图片的高
              $photo_info['url'] = $path_name;
              $photo_info['width'] = $weight;
              $photo_info['height'] = $height;
              $result_arr[] = $photo_info;
      }else{
      $result_arr[] = $path_name;
    }
//处理图片
if($make == 1){
$img = Image::make($path_name)->resize(200, $height*200/$weight);
$img->save($logo_path ."/".$new_name."_s.".$entension);
//dd($img);
// return $img->response('jpg');
}
}
if(empty($result_arr)){
$response['result_code'] = -1006;
$response['result_msg'] = $App_Error_Conf[-1006];
return response($response);
}
if($encode == 1){
$result_arr = json_encode($result_arr);
}
}
return $result_arr;
}
}

微信小程序---图片上传+服务端接受的更多相关文章

  1. 微信小程序图片上传和裁剪

    本篇博客用于解决微信小程序图片裁剪问题 图片裁剪常用于头像选择和图片合成等. 图片裁剪解决方案: 目前网络上知名的微信小程序图片裁剪插件是we-cropper(文末有链接) 操作步骤:下载好we-cr ...

  2. 5行代码实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频 ...

  3. 快速高效实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率 对于一般的图片上传功能开发,我们 ...

  4. 微信小程序图片上传并展示

    1.首先编写微信小程序的页面和样式: index.js var total = []; Page({ data: { perImgSrc: [] }, onLoad: function (option ...

  5. 微信小程序图片上传java后台(前后端代码)

    小程序代码 upload:function(e){ var that = this; wx.showActionSheet({ itemList: ['从相册选择','拍照'], itemColor: ...

  6. 微信小程序图片上传放大预览删除代码

    效果: 一,下面是上传图片的效果 image.js代码: Page({ //选择相册或拍照 data: { imgs: [] }, //上传图片 chooseImg: function (e) { v ...

  7. 微信小程序图片上传

    uploadImage : function (){ wx.chooseImage({ count: 9, // 默认9 sizeType: ['original', 'compressed'], / ...

  8. 微信小程序开发之多图片上传+服务端接收

    前言: 业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存. 使用技术: 在这章中将会使用到微信小程序wx.uploadFile(Object ...

  9. [转]微信小程序开发(二)图片上传+服务端接收

    本文转自:http://blog.csdn.net/sk719887916/article/details/54312573 文/YXJ 地址:http://blog.csdn.net/sk71988 ...

随机推荐

  1. C++中对类的提前引用声明注意事项

    //或许,友元是VC++6.0心里永远的痛,对于这个BUG我一直很介意.//注:这个程序在VC++6.0里是行不通的,在VS2008里是可以的.#include <iostream> #i ...

  2. PowerDesigner 把Comment写到name中 和把name写到Comment中

    在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般在NAME或Comment中写中文,在Code中写英文.Name用来显 示,Code在代码中使用,但Comment中的文字会保 ...

  3. CopyOnWrite 策略

    CopyOnWrite 是用于解决并发读写的一种策略,在Write的时候对共享变量进行Copy,在副本上进行更新,再把更新好的副本原子性地替换原来的共享变量.写入时复制是一种优化策略,多个调用者同时访 ...

  4. poj1151 Atlantis——扫描线+线段树

    题目:http://poj.org/problem?id=1151 经典的扫描线问题: 可以用线段树的每个点代表横向被矩形上下边分割开的每一格,这样将一个矩形的出现或消失化为线段树上的单点修改: 每个 ...

  5. ceph学习之pool

    pool是ceph存储数据时的逻辑分区,它起到namespace的作用.其他分布式存储系统,比如Mogilefs.Couchbase.Swift都有pool的概念,只是叫法不同.每个pool包含一定数 ...

  6. 用于生成交易统计时间戳(常配合echarts走势图使用)

    <?php //获取交易统计时间戳 时间段内每小时 public function getPayCountTimeHours($start_date,$end_date){ $data = ar ...

  7. 1.1-1.5 flume架构概述及安装使用

    一.flume架构概述 1.flume简介 Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据.它具有基于流数据流的简单灵活的架构.它具有可靠的可靠性机制和许多故障转移和 ...

  8. 【Linux学习】Linux文件系统1--文件系统的目录结构

    Linux文件系统1--文件系统的目录结构 一.linux文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 1.普通文件:如文本文件. ...

  9. java集合框架之HashCode

    参考http://how2j.cn/k/collection/collection-hashcode/371.html List查找的低效率 假设在List中存放着无重复名称,没有顺序的2000000 ...

  10. sed的基础用法简介

    sed 最近学习了一些sed的相关知识,初步接触sed以后给我的感受主要有两点.首先是sed强大的功能,学了以后发现之前写的脚本利用sed以后会简化很多啊,具体的有些利用sed编辑shell脚本的思路 ...