小程式上傳帖子(含有文字圖片的微信驗證)

来源:https://www.cnblogs.com/wmc1125/archive/2020/07/10/13281534.html
-Advertisement-
Play Games

public.js var graceJS = require('../../utils/grace.js'); import { config } from '../../config.js' Page({ /** * 頁面的初始數據 */ data: { imglist: [], title:' ...


image-20200710152728342

public.js

var graceJS = require('../../utils/grace.js');
import { config } from '../../config.js'
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    imglist: [],
    title:'',
    content:'',

  },

  delImg(e) {
    let index = e.currentTarget.dataset.index;
    let array = [];
    console.log(index);
    for (var i = 0; i < this.data.imglist.length; i++) {
      if (i !== index) {
        array.push(this.data.imglist[i])
      }
    }
    console.log(array);
    this.setData({
      imglist: array,
    })
  },

  upimg() {
    let that = this
    var url = config.api_base_url + "upload_pic"
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success(res) {
        const tempFilePaths = res.tempFilePaths;
        wx.showLoading({
          title: '上傳中',
        })
        wx.uploadFile({
          url,
          filePath: tempFilePaths[0],
          name: 'file',
          success(res) {
            console.log(res.data);
            wx.hideLoading()
            if (res.data == '0') {
                graceJS.msg('上傳失敗');
            }else{
              console.log(res.data)
              if (res.data.indexOf("非法圖片")>=0){
                graceJS.msg(res.data);
              } else {
                graceJS.msg("上傳成功");
                var array = that.data.imglist.concat(res.data)
                that.setData({
                  imglist: array,
                })
              }
            }
            
          }
        })

      }
    })
  },
  zf_title:function(e){
    this.setData({
      title: e.detail.value
    })
  },
  zf_content: function (e) {
    this.setData({
      content: e.detail.value
    })
  },
  tj_info: function (event){
    var that = this;
    console.log("event", event)
    var title = this.data.title;
    var content = this.data.content;
    console.log(title)
    console.log(content)
    var imglist = that.data.imglist;
    var uid = wx.getStorageSync('user').id
    if (!title && !content) {
      graceJS.msg("請填寫完整");
    } else {
      //寫入資料庫
      if (uid != undefined) {
        graceJS.post(
          config.api_base_url + 'tiezi_add',
          {title:title, content:content,uid:uid,imglist:imglist}, 
          'json',
          {}, // 此處 {} 代表不設置 header 數據
          function(res){
            if (res.result == 1) {
              graceJS.msg(res.msg);
              setTimeout(()=>{
                graceJS.navigate('../discover/discover','switchTab');
              },2000)
            }else{
              graceJS.msg(res.msg);
            }
          }
        );
      }else{
        graceJS.msg("用戶ID獲取失敗");
      }
     
    }
  },

  /**
   * 生命周期函數--監聽頁面載入
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函數--監聽頁面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函數--監聽頁面顯示
   */
  onShow: function () {

  },

  /**
   * 生命周期函數--監聽頁面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函數--監聽頁面卸載
   */
  onUnload: function () {

  },

  /**
   * 頁面相關事件處理函數--監聽用戶下拉動作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁面上拉觸底事件的處理函數
   */
  onReachBottom: function () {

  },

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function () {

  }
})

publish.wxml

<!--pages/publish/publish.wxml-->
<view>
    <form > 
		<view class="publish_a">
			<view class="publish_a1">
				<view class="publish_a1_a">
					<input type="text" name="title" bindinput="zf_title" placeholder="輸入標題" />
				</view>
				<view class="publish_a1_b">
					<textarea name="content"  bindinput="zf_content"  placeholder="輸入內容文字"></textarea>
				</view>
				<view class="publish_a1_c">
					<view class="publish_a1_c1" >
						<image src="../../img/127.png" bindtap="upimg"></image>
					</view>
					<view class="publish_a1_c2">
						<view wx:for="{{imglist}}" bindtap="delImg" data-index="{{index}}">
							<image src="{{item}}" ></image>
							<text>X</text>
						</view>
					</view>
				</view>
			</view>
		</view>
    	<view class="publish_b" bind:tap="tj_info">發佈帖子</view>
	</form>
</view>

publish.wxss

/* pages/publish/publish.wxss */
page{
	padding-bottom: 120rpx;
}
.publish_a{
	padding: 20rpx;
}
.publish_a1{
	background-color: #f5f2f4;
	padding: 20rpx;
}
.publish_a1_a input{
	width: 100%;
	height: 80rpx;
	line-height: 80rpx;
	font-size: 28rpx;
	font-weight: bold;
}
.publish_a1_b textarea{
	width: 100%;
	font-size: 28rpx;
}
.publish_a1_c1{
	margin-bottom: 20rpx;
}
.publish_a1_c1 image{
	display: block;
	width: 200rpx;
	height: 200rpx;
}
.publish_a1_c2{
	display: flex;
	flex-wrap: wrap;
}
.publish_a1_c2 view{
	position: relative;
	width: 200rpx;
	height: 200rpx;
	margin-right: 20rpx;
	margin-bottom: 20rpx;
}
.publish_a1_c2 image{
	display: block;
	width: 100%;
	height: 100%;
}
.publish_a1_c2 text{
	display: block;
	position: absolute;
	right: 0;
	top: 0;
	width: 40rpx;
	height: 40rpx;
	text-align: center;
	line-height: 40rpx;
	font-size: 26rpx;
	color: #fff;
	background-color: rgba(0,0,0,0.3);
}

.zf_btn{
  width: 500px;
}
.publish_b{
	position: fixed;
	left: 0;
	bottom: 0;
	/* width: 100%; */
	background-color: #a67f4a;
	line-height: 100rpx;
	text-align: center;
	color: #fff;
	font-size: 30rpx;
	min-width: 380px;
  width: 100%;
  padding: 0;
  margin: 0;
}

tp

引入
use EasyWeChat\Factory;

public function __construct ( Request $request = null )
    {
        $this->config = [
            'app_id' => 'wx4**********fd45a65',
            'secret' => '082dec1****5b93d286c093e01',
            'response_type' => 'array',
            'log' => [
                'level' => 'debug',
                'file' => __DIR__.'/log/wechat.log',
            ],
        ];
        $this->uid = '';
    }

public function tiezi_add(){
        $data = input('post.');
        if($data['imglist']!=[]){
            foreach ($data['imglist'] as $k => $vo) {
                $data['imglist'][$k] = trim($vo);
            }
            $data['album'] = trim(implode(',', $data['imglist']));
        }
        unset($data['imglist']);

        $data['cid'] = 17;
        $data['status'] = 1;
        $data['sort'] = 0;
        $data['ctime'] = time();
        if(!isset($data['album'])){
            return jserror('至少上傳一張圖片 ');
        } 
        //驗證
    		$miniProgram = Factory::miniProgram($this->config);
    		$result = $miniProgram->content_security->checkText($data['content']);
    		$result2 = $miniProgram->content_security->checkText($data['title']);
    		if($result['errcode']!='0'){
    			return jserror('含有非法關鍵詞');
    		}
    		if($result2['errcode']!='0'){
    			return jserror('含有非法關鍵詞');
    		}

        //保存
        $res = Db::name('post')->insert($data);
        if($res){
            return jssuccess('發佈成功');
        }else{
            return jserror('發佈失敗');
        }
    }
  
public function upload_pic(){
        $file = request()->file('file');
        $info = $file->validate(['ext'=>config()['web']['file_ext']])->move('./public/upload/admin/file');
        $getSaveName = str_replace('\\', '/', $info->getSaveName());//win下反斜杠替換成斜杠
        $msg = 'http://'.$_SERVER['SERVER_NAME'].'/public/upload/admin/file/'.$getSaveName;
         if(is_file('./public/upload/admin/file/'.$getSaveName)){
          //驗證圖片
            $miniProgram = Factory::miniProgram($this->config);
            $result = $miniProgram->content_security->checkImage('./public/upload/admin/file/'.$getSaveName);
            if($result['errcode']!='0'){
              return '非法圖片';
            }else{
              return $msg;
            }
          ################
        }else{
            return '0';
        }

        
    }

高顏值後臺管理系統免費使用 ### 子楓後臺管理系統 ###,可在寶塔面板直接安裝

歡迎關註我的公眾號:子楓的奇妙世界,獲得獨家整理的學習資源和日常乾貨推送。
如果您對我的其他專題內容感興趣,直達我的個人博客:www.wangmingchang.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 原文出處:https://blog.bitsrc.io/es2020-has-been-finalized-here-is-what-im-excited-about-414959bc2f7f 最近這幾年,隨 ...
  • 題庫管理 22. 圖片庫:創建文件目錄,維護圖片,供題庫選擇調用 23. 單選題:維護單選試題,試題題目,選項,答案,類型,級別,狀態,解析 24. 多選題:維護多選試題,試題題目,選項,答案,類型,級別,狀態,解析 25. 判斷題:維護判斷試題,試題題目,答案,類型,級別,狀態,解析 26. 填空 ...
  • 簡介 AQS(AbstractQueuedSynchronizer)是併發開發中一個基礎組件。主要實現了同步狀態管理、線程隊列管理、線程等待、線程喚醒等底層操作。JDK中許多的併發類都是依賴AQS的。 ReentrantLock(可重入鎖)、Semaphore(信號量)、CountDownLatch ...
  • 寫在前面的話 第一次用博客園,正好要複習下Python,就在隨筆這裡記錄下我學習的知識點和心得,順帶著學習下寫博客的方法。(p≧w≦q) 博客主要還是記錄整理評價我寫過的課程設計和一些演算法。 話說真的有人會看到嘛 இ௰இ 第一章 Python語言概述 電腦常用數制和編碼 數制 任何的信息必須轉化成 ...
  • 【創建虛擬環境】 命令:mkvirtualenv 名字 -p /usr/bin/python3 # 配置環境 退出虛擬環境 deactivate 進入虛擬環境 workon 虛擬環境名稱 刪除虛擬環境 rmvitualenv 虛擬環境名稱 進入環境後:pip freeze #顯示環境中的應用 安裝D ...
  • 游戲背景 《球球大作戰》是Superpop一款自主研du發的免費手機網路游戲。 以玩家間的實時互動PK產生游戲樂趣為設計宗旨,通過簡單的規則將玩家操作直接轉化為游戲策略,體驗智謀碰撞的戰鬥樂趣。 游戲的基本操作包括鍵盤按下(上下左右四個方向,還有作弊測試按鍵空格鍵和A鍵),玩家可以在地圖上隨意移動, ...
  • 一、 static static:靜態的,可以用來修飾屬性、方法、*代碼塊(或初始化塊)、*內部類 static修飾屬性(類變數): 由類創建的所有的對象,都共用這一個屬性 當其中一個對象對此屬性進行修改,會導致其他對象對此屬性的一個調用。vs 實例變數(非static修飾的屬性,各個對象各自擁有一 ...
  • MATLAB小函數:展示灰度圖像數據集的部分樣例 作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/ 更多請看:MATLAB作圖 給定一個.mat文件的灰度圖像數據集,用MATLAB程式展示該圖像數據集的一部分樣例,每一類都展示相同數目的樣例圖,並將它們匯 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...