原文地址: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. 第九章-IO编程

    IO是输出输入的意思 在计算机中常用到的数据交换的地方是磁盘, 网络等 输入流是从外面(磁盘, 网络)流进内存 输出流是从内存流到外面(磁盘, 网络) 同步IO是指等待IO完成再继续执行 异步IO是在 ...

  2. boost replace_if replace_all_regex_copy用法

    #include <boost/algorithm/string.hpp> // for is_any_of #include <boost/range/algorithm/repl ...

  3. java前三天

    JDK :开发 JRE:运行 JVM:运行环境(跨平台) 注释:推荐使用第二种方式设置环境变量 nopad++ :设置 注释:1字节等于8位,也就等于2的8次方 2字节等于16位,也就等于2的16次方 ...

  4. table内 获取同一行 其他列的value

    table内  获取同一行 其他列的value function move(obj,ud){ var code = document.getElementById("reportName&q ...

  5. 【旧文章搬运】关于NtUserBuildHwndList的一点记录~

    原文发表于百度空间,2011-04-07========================================================================== 该函数与r ...

  6. Ubuntu 16.04使用chrome闪屏

    使用Chrome的时候上端经常出现闪动的情况, 但是速度特别快, 根本无法截图, 感觉特别扎心, 以为自己的电脑出现问题了或者显卡驱动出现问题了, 后来才发现问题, 只需要关闭Chrome的硬件加速就 ...

  7. hdu-1181

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  8. TypeScript完全解读(26课时)_4.TypeScript完全解读-接口

    4.TypeScript完全解读-接口 初始化tslint tslint --init:初始化完成后会生成tslint.json的文件 如果我们涉及到一些规则都会在这个rules里面进行配置 安装ts ...

  9. C# 生成随机阿拉伯数字,或字符串

    //TextBox1.Text = TongYong.SuiJi.SuiJiMingZi(2); public class SuiJi { //TextBox1.Text = TongYong.Sui ...

  10. 如何用纯js做一个大富翁游戏

    下面这张是效果图: 先立个flag,一个星期内把这个坑填了