原文地址: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. some characters cannot be mapped using iso-8859-1 character encoding

    Eclipse中新建一个.properties文件,如果输入中文保存时就会提示错误 Reason:some characters cannot be mapped using "ISO-88 ...

  2. vue.js created函数注意事项

    因为created钩子函数是页面一加载完就会调用的函数,所以如果你想在这个组件拿值或者是赋值,很可能this里面能拿到数据,但是如果你用this.赋值的话,控制台或者debugger都会发现this里 ...

  3. POJ3273(最大化问题)

    Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20603   Accepted: 8101 ...

  4. POJ2217(最长公共子串)

    Secretary Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 992   Accepted: 408 Descripti ...

  5. android jni java类型与c语言类型互换

    1.java String转换 C str char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsst ...

  6. 关于 jwTextFiled 的使用说明

    我在些项目中多次对一些输入框做了相同的代码操作,终于有一天忍不住了,MD必须写一个小的框架解决这个搬砖的问题.经过一天的战斗,于是 jwTextFied 就默默的诞生了. 地址:https://git ...

  7. Linux中如何开启8080端口供外界访问 和开启允许对外访问的端口8000

    举例: 开放10000端口的解决步骤如下: 1.修改/etc/sysconfig/iptables文件,增加如下一行: -A INPUT -m state --state NEW -m tcp -p ...

  8. c++函数模板1

    1 定义: 函数模板 只适用于参数个数相同但是类型不同 而且函数体相同的情况 2 这个例子没有使用模板的情况 #include <iostream> using namespace std ...

  9. Flutter实战视频-移动电商-46.详细页_自定义TabBar Widget

    46.详细页_自定义TabBar Widget 主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个 ...

  10. Makefile研究 (一)—— 必备语法

    摘自:http://blog.csdn.net/jundic/article/details/17535445 参考文档:http://blog.csdn.net/wrx1721267632/arti ...