搜尋
首頁微信小程式小程式開發微信小程式開發之圖片上傳+服務端接收教學課程

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

前幾天做了圖片上傳功能,被坑了一下。接下來我們來看看微信的上傳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(&#39;../../../utils/util.js&#39;)
var app = getApp()
Page({
 data: {
sex_items: [
 {name:&#39;1&#39;, value:&#39;小王子&#39;},
 {name:&#39;2&#39;, value:&#39;小公主&#39;},
 {name:&#39;0&#39;, value:&#39;尚无&#39;}
],
logo:null,
 
userInfo: {}
 },
 
 //事件处理函数
 bindViewTap: function() {
wx.navigateTo({
 // url: &#39;../logs/logs&#39;
// url: &#39;../load/load&#39;
})
 },
 onLoad: function () {
console.log(&#39;onLoad&#39;)
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, &#39;photos&#39;, formData, 
function(res){
 console.log(res);
},
function(){
})
 }, 
 
 chooseImageTap: function(){
let _this = this;
wx.showActionSheet({
 itemList: [&#39;从相册中选择&#39;, &#39;拍照&#39;],
 itemColor: "#f7982a",
 success: function(res) {
 if (!res.cancel) {
 if(res.tapIndex == 0){
 _this.chooseWxImage(&#39;album&#39;)
 }else if(res.tapIndex == 1){
 _this.chooseWxImage(&#39;camera&#39;)
 }
 }
 }
})
 
 },
chooseWxImage:function(type){
let _this = this;
wx.chooseImage({
 sizeType: [&#39;original&#39;, &#39;compressed&#39;],
 sourceType: [type],
 success: function (res) {
 console.log(res);
 _this.setData({
 logo: res.tempFilePaths[0],
 })
 }
 })
 }
})

主要講解一下JS代碼

1、chooseImageTap方法 

用來顯示一個選擇圖片和拍照的彈窗,用到了微信的一個

用來顯示一個選擇圖片和拍照的彈窗,用到了微信的一個

用來顯示一個選擇圖片和拍照的彈窗,用到了微信的一個

api showAction

顯示操作選單

2、chooseWxImage方法 

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

上傳紙、從本地相冊選擇圖片或使用相機拍照

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

uploadFile方法

//上传文件
function upload_file(url, filePath, name, formData, success, fail) {
console.log(&#39;a=&#39;+filePath)
wx.uploadFile({
 url: rootUrl + url,
 filePath:filePath,
 name:name,
 header: {
 &#39;content-type&#39;:&#39;multipart/form-data&#39;
 }, // 设置请求的 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[&#39;photos&#39;])){
  $up_arr[&#39;logo&#39;] = upload_logo(&#39;photos&#39;,&#39;manage/images/user&#39;,&#39;logo&#39;,$user_id,0);
  $up_arr[&#39;logo&#39;] = $up_arr[&#39;logo&#39;][0];
  $user_info[&#39;logo&#39;] = $Server_Http_Path . $up_arr[&#39;logo&#39;];
}

核心方法在upload_log中。

圖片接收保存

if( !function_exists(&#39;upload_logo&#39;)){
 function upload_logo( $key_name=&#39;photos&#39;, $logo_path=&#39;manage/images/nurse&#39;, $pre_name=&#39;logo&#39;, $salt=&#39;20160101&#39;,$encode = 1,$make=0 ){
  $result_arr = array();
  global $Server_Http_Path,$App_Error_Conf;
  //分文件夹保存 
  $date_info = getdate();
  $year = $date_info[&#39;year&#39;];
  $mon = $date_info[&#39;mon&#39;];
  $day = $date_info[&#39;mday&#39;];
  $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[&#39;photos&#39;];
  $name = $key_name;
 
  $file_id = Input::file($name);
  if(!empty($file_id) && $file_id -> isValid()){
   $entension = $file_id -> getClientOriginalExtension();
   if($pre_name == &#39;baby&#39;){
    $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[&#39;url&#39;] = $path_name;  
 
   $photo_info[&#39;width&#39;] = $weight;
  $photo_info[&#39;height&#39;] = $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(&#39;jpg&#39;);
    }
   }
if(empty($result_arr)){
 $response[&#39;result_code&#39;] = -1006;
 $response[&#39;result_msg&#39;] = $App_Error_Conf[-1006];
  return response($response);
   }
 if($encode == 1){
    $result_arr = json_encode($result_arr);
   }
  }
  return $result_arr;
 }
 }

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

這樣我們就入門了小程式圖片上傳和介面功能了。

以上就是微信小程式開發之圖片上傳+服務端接收教學的內容,更多相關內容請關注PHP中文網(www.php.cn)!

🎜🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。