Cette fois, je présenterai le téléchargement d'images couramment utilisé dans les mini-programmes.
J'ai créé la fonction de téléchargement d'images il y a quelques jours, mais je me suis fait avoir. Jetons ensuite un coup d’œil à l’API de téléchargement de WeChat.
Le filePath ici est le chemin de stockage de l'image, et le type est en fait une chaîne, ce qui signifie qu'une seule image peut être transmise à la fois. reçu un tableau. Je suis une personne à moitié expérimentée en PHP, je ne peux donc changer l'interface de réception des images que par moi-même.
Regardez les rendus de page
Un effet très courant consistant à modifier l'avatar, à sélectionner la photo (prendre une photo), puis à la télécharger.
Ce qui suit est le code
Le premier est le code wxml du mini programme
<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>
Je ne publierai pas le code CSS, juste quelques styles.
Code JS correspondant
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], }) } }) } })
Expliquez principalement le code JS
1 Choisissez la méthode ImageTap
est utilisée pour afficher une image sélectionnée et. La fenêtre contextuelle pour prendre des photos utilise showActionSheet, une API interactive de page de WeChat Cliquez pour voir l'utilisation détaillée
Afficher le menu d'opération
2. Choisissez la méthode WxImage
.
Principalement utilisé pour sélectionner des images et recevoir une surveillance de rappel du chemin d'image, cliquez pour voir l'utilisation détaillée
Sélectionnez des images de l'album local ou utilisez l'appareil photo pour prendre des photos
3. Téléchargez
Dans le rappel réussi de la méthode ChooseWxImage, nous pouvons voir que j'ai attribué le chemin de l'image renvoyé res.tempFilePaths[0] Ensuite, il suffit d'appeler le logo. méthode de téléchargement. La méthode uploadFile de WeChat est que je l'ai encapsulé et transformé en upload_file.
Méthode 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 est la variable de logo que nous avons transmise dans upload_file, qui est le chemin absolu de l'image.
Le code de réception de l'image du serveur
Ceux qui ont lu mon précédent article sur le processus de connexion savent que mon serveur utilise le framework PHP Laravel.
Ici, je publierai uniquement le code pour recevoir l'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']; }
La méthode principale est dans upload_log ;
Recevoir et enregistrer des images
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; } }
Ce format de code est vraiment ennuyeux, alors je viens de le régler.
De cette façon, nous avons commencé à démarrer avec les fonctions de téléchargement d'images et d'interface du mini programme.
Ce qui précède est le contenu du didacticiel de téléchargement d'images et de réception sur le serveur pour le développement d'applets WeChat. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !