中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序如何實現圖片上傳+服務端接收功能

發布時間:2021-07-03 17:13:03 來源:億速云 閱讀:844 作者:小新 欄目:web開發

小編給大家分享一下微信小程序如何實現圖片上傳+服務端接收功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

這次介紹下小程序當中常用的圖片上傳。

微信的上傳api。

微信小程序如何實現圖片上傳+服務端接收功能

這里的filePath就是圖片的存儲路徑,類型居然是個String,也就是 只能每次傳一張圖片,我以前的接口都是接收一個array,我本人又是一個半吊子的PHP,只能自己去改接收圖片的接口。

看一下頁面效果圖

微信小程序如何實現圖片上傳+服務端接收功能

一個很常見的修改頭像效果,選擇圖片(拍照),然后上傳。

下面就是貼代碼了

首先是小程序的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>

css代碼我就不貼了,一些樣式而已。

對應的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(){
})
 }, 

 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],
 })
 }
 })
 }
})

主要講解一下JS代碼

1、chooseImageTap方法

用來顯示一個選擇圖片和拍照的彈窗,用到了微信的一個頁面交互的api showActionSheet,點擊查看詳細使用

顯示操作菜單

2、chooseWxImage方法

主要是用來選擇圖片以及接收圖片路徑回調的監聽,點擊查看詳細使用

從本地相冊選擇圖片或使用相機拍照

3、上傳

在chooseWxImage方法的success回調中我們可以看到,我把返回的圖片路徑res.tempFilePaths[0] 賦值給了logo,下面我們只需要調用upload方法就ok了,微信的uploadFile方法被我封裝了一下變成了upload_file。

uploadFile方法

//上傳文件
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':'multipart/form-data'
 }, // 設置請求的 header
 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變量,也就是圖片的絕對路徑。

服務器的接收圖片代碼

看過我上篇文章登錄流程的文章的都熟悉了我服務器用的是php框架是Laravel。

這里我只貼一下接收image的代碼;

 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['mday'];
  $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"];///獲取圖片的高
if($pre_name == "baby" || $pre_name == "video") {   

   $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;
 }
 }

這個代碼格式真的很煩人啊,我就大概整理了一下。

這樣我們就入門了小程序圖片上傳和接口功能了。

以上是“微信小程序如何實現圖片上傳+服務端接收功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

香港| 克拉玛依市| 永新县| 通化县| 新蔡县| 泰安市| 慈溪市| 黑龙江省| 新郑市| 当涂县| 乌兰浩特市| 兴化市| 东城区| 湛江市| 固安县| 屯昌县| 和政县| 即墨市| 体育| 句容市| 邛崃市| 漳州市| 昭觉县| 锡林郭勒盟| 化州市| 错那县| 娄烦县| 巴林右旗| 公安县| 昂仁县| 新和县| 龙胜| 金昌市| 高阳县| 宁武县| 高碑店市| 荃湾区| 永兴县| 松江区| 黎平县| 绥宁县|