国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【教程】微信小程序如何拍攝圖片及視頻并上傳到后臺進(jìn)行存儲

這篇具有很好參考價(jià)值的文章主要介紹了【教程】微信小程序如何拍攝圖片及視頻并上傳到后臺進(jìn)行存儲。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求分析

微信小程序中需要使用手機(jī)拍攝照片以及視頻上傳到后臺進(jìn)行進(jìn)一步的操作,需要解決以下兩個(gè)問題:

  1. 微信小程序如何拍攝照片及視頻
  2. 如何將拍攝的照片及視頻上傳到后臺進(jìn)行存儲

解決方案

前端開發(fā):微信小程序原生

后端開發(fā):Flask

如何拍攝照片及視頻

微信小程序如何拍攝照片及視頻:使用wx.chooseMediaAPI來實(shí)現(xiàn)

該API用于拍攝或從手機(jī)相冊中選擇圖片或視頻,文檔鏈接為:wx.chooseMedia(Object object) | 微信開放文檔

簡單示例:

function test()
{
  wx.chooseMedia({
        count: 1,
        mediaType: ['image'],
        sourceType: ['camera'],
        camera: 'back',
        success(res) {
          console.log(res)
        },
        fail(res){
          console.log(res)
        }
  })
}

主要參數(shù)含義如下:

  • count:最多可以選擇的文件個(gè)數(shù)
  • mediaType:文件類型,可選值為:['image']/['video']/['image','video'],默認(rèn)值為['image','video'],意為即允許拍攝圖片也允許拍攝視頻
  • sourceType:文件來源,可選值為['album']/[ 'camera']/['album', 'camera'],默認(rèn)值為['album', 'camera'],意為即允許從相冊選擇,也允許直接拍攝
  • camera:僅在 sourceType 為 camera 時(shí)生效,使用前置或后置攝像頭,可選值為'back'/'front',默認(rèn)值為'back'

回調(diào)參數(shù)res內(nèi)容如下:

  • tempFiles:本地臨時(shí)文件列表,其中的tempFilePath是本地臨時(shí)文件路徑,也是該示例中的核心參數(shù);
  • type:文件類型

(更多參數(shù)以及回調(diào)參數(shù)請參考官方文檔)

由上可知,我們首選需要調(diào)用wx.chooseMedia函數(shù),選擇拍攝照片或者視頻,然后在回調(diào)函數(shù)中拿到本地臨時(shí)文件路徑,這樣就獲取到了拍攝的照片或視頻,但我們拿到的并不是一個(gè)完整的.png/.mp4文件,而是一個(gè)臨時(shí)文件鏈接,例如:http://tmp/z7bXVKwgyWTKcbc89c663afd501de1d27ed321f8591c.jpg

這樣的文件鏈接可以在開發(fā)者工具中打開:

微信小程序視頻上傳與保存,微信小程序,全棧,微信小程序,音視頻,notepad++,小程序,flask

但該鏈接無法在外部進(jìn)行訪問,因此就涉及到如何將該鏈接所代表的文件上傳到后臺的問題;

這樣的文件在小程序中被稱為”本地臨時(shí)文件“,僅在當(dāng)前生命周期內(nèi)保證有效,重啟之后不一定可用;更多內(nèi)容請參考官方文檔:文件系統(tǒng) | 微信開放文檔

如何上傳后臺進(jìn)行存儲

如何將拍攝的照片及視頻上傳到后臺進(jìn)行存儲:

  • 前端:使用wx.uploadFileAPI
  • 后端:使用request.files['photo'].stream.read()來讀取文件

前端代碼

有關(guān)wx.uploadFile可以參考:UploadTask | 微信開放文檔

主要參數(shù)有:

  • url:開發(fā)者服務(wù)器地址,即要訪問的接口
  • filePath:要上傳的文件路徑(本地路徑),這里即是通過wx.chooseMedia回調(diào)中的tempFilePath
  • formData:HTTP 請求中其他額外的 form data,允許我們傳輸文件的時(shí)候攜帶一些其他的參數(shù),比如說文件名稱;

因此完整的前端代碼如下(上傳圖片):

//拍攝照片
photoCapture() {
    let that = this
    wx.chooseMedia({
        count: 1,
        mediaType: ['image'],
        sourceType: ['camera'],
        camera: 'back',
        success(res) {
            that.setData({
                photoLink: res.tempFiles[0].tempFilePath,
            })
            console.log(res.tempFiles[0].tempFilePath)
            console.log('圖片拍攝成功')
            wx.showLoading({
                title: '正在上傳圖片',
                mask: true
            })

            //圖片上傳
            wx.uploadFile({
                url: 'http://localhost:5000/uploadImage',
                filePath: res.tempFiles[0].tempFilePath,
                name: 'photo',
                formData: {
                    fileName: 'photoTest.png'
                },
                success(res) {
                    wx.showToast({
                        title: '圖片上傳成功',
                    })
                }
            })
        },
        fail(res) {
            console.log('圖片拍攝失敗')
        }
    })
}

首先拍攝照片,然后上傳文件

后端代碼

后端使用flask進(jìn)行開發(fā)

通過request.files來接收文件

通過request.form來接收wx.uploadFileformData中攜帶的數(shù)據(jù)

通過write方法將接收到的文件保存到本地

因此完整的后端代碼如下(上傳圖片):

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'

# 圖片上傳
@app.route('/uploadImage', methods=["POST"])
def uploadImage():
    video = request.files['photo'].stream.read()
    name = request.form['fileName']
    if not files_exists(name, 2):
        file_path = os.getcwd() + '\\images\\' + name
        with open(file_path, 'ab') as f:
            f.write(video)
        return 'image upload success'
    else:
        return 'image already exist'

# 判斷文件是否已經(jīng)存在
def files_exists(file_name, choice):
    if choice == 1:
        path = os.getcwd() + '\\videos\\'
        video_path = os.path.join(path, file_name)
        return os.path.isfile(video_path)
    else:
        path = os.getcwd() + '\\images\\'
        image_path = os.path.join(path, file_name)
        return os.path.isfile(image_path)

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

運(yùn)行結(jié)果

首先啟動(dòng)后端服務(wù),然后小程序初始頁面如下:

微信小程序視頻上傳與保存,微信小程序,全棧,微信小程序,音視頻,notepad++,小程序,flask

點(diǎn)擊按鈕拍攝圖片,可以看到圖片成功預(yù)覽在小程序中:

微信小程序視頻上傳與保存,微信小程序,全棧,微信小程序,音視頻,notepad++,小程序,flask

在NetWork中可以看到接口的返回值:

微信小程序視頻上傳與保存,微信小程序,全棧,微信小程序,音視頻,notepad++,小程序,flask

圖片上傳成功;在后端也能看到圖片已經(jīng)保存下來了:

微信小程序視頻上傳與保存,微信小程序,全棧,微信小程序,音視頻,notepad++,小程序,flask

所有代碼

完整代碼可以從這里下載:

微信小程序上傳圖片視頻到后臺存儲demo資源-CSDN文庫

前后端代碼都有

前端代碼

index.wxml:

<button type="primary" bind:tap="photoCapture">點(diǎn)擊拍攝圖片</button>
<image src="{{photoLink}}"></image>
<button type="primary" bind:tap="videoCapture">點(diǎn)擊拍攝視頻</button>
<image src="{{videoLink}}"></image>

index.wxss:

page {
  padding-top: 100rpx;
  height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
}
image{
  margin-top: 50rpx;
  margin-bottom: 50rpx;
  width: 600rpx;
  height: 400rpx;
  border: 1px solid black;
}

index.js:

Page({
  data: {
    photoLink: '',
    videoLink: '',
  },

  //拍攝照片
  photoCapture() {
    let that = this
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['camera'],
      camera: 'back',
      success(res) {
        that.setData({
          photoLink: res.tempFiles[0].tempFilePath,
        })
        console.log(res.tempFiles[0].tempFilePath)
        console.log('圖片拍攝成功')
        wx.showLoading({
          title: '正在上傳圖片',
          mask: true
        })

        //圖片上傳
        wx.uploadFile({
          url:'http://localhost:5000/uploadImage',
          filePath: res.tempFiles[0].tempFilePath,
          name: 'photo',
          formData: {
            fileName:'photoTest.png'
          },
          success(res) {
            wx.showToast({
              title: res.data,
            })
          }
        })
      },
      fail(res) {
        console.log('圖片拍攝失敗')
      }
    })
  },

  //拍攝視頻
  videoCapture() {
    let that = this
    wx.chooseMedia({
      count: 1,
      mediaType: ['video'],
      sourceType: ['camera'],
      maxDuration: 60,
      camera: 'back',
      success(res) {
        that.setData({
          videoLink: res.tempFiles[0].thumbTempFilePath
        })
        console.log('視頻拍攝成功')
        console.log(res.tempFiles[0].tempFilePath)
        wx.showLoading({
          title: '正在上傳視頻',
          mask: true
        })

        //視頻上傳
        wx.uploadFile({
          url:'http://localhost:5000/uploadVideo',
          filePath: res.tempFiles[0].tempFilePath,
          name: 'video',
          formData: {
            fileName:'videoTest.mp4'
          },
          success(res) {
            wx.showToast({
              title: res.data,
            })
          }
        })
      },
      fail(res) {
        console.log('圖片拍攝失敗')
      }
    })
  }
})

后端代碼

from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'

@app.route('/uploadVideo', methods=["POST"])
def uploadVideo():
    video = request.files['video'].stream.read()
    name = request.form['fileName']
    if not files_exists(name, 1):
        file_path = os.getcwd() + '\\videos\\' + name
        with open(file_path, 'ab') as f:
            f.write(video)
        return 'upload success'
    else:
        return 'already exist'


@app.route('/uploadImage', methods=["POST"])
def uploadImage():
    video = request.files['photo'].stream.read()
    name = request.form['fileName']
    if not files_exists(name, 2):
        file_path = os.getcwd() + '\\images\\' + name
        with open(file_path, 'ab') as f:
            f.write(video)
        return 'upload success'
    else:
        return 'already exist'


def files_exists(file_name, choice):
    if choice == 1:
        path = os.getcwd() + '\\videos\\'
        video_path = os.path.join(path, file_name)
        return os.path.isfile(video_path)
    else:
        path = os.getcwd() + '\\images\\'
        image_path = os.path.join(path, file_name)
        return os.path.isfile(image_path)


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

此外文件上傳到后臺也可以采用base64編碼的方式進(jìn)行上傳

在我的這篇文章的【頭像昵稱填寫】部分有所提及:微信小程序用戶登錄及頭像昵稱設(shè)置教程(前后端)_微信小程序-原生開發(fā)用戶登錄-CSDN博客

歡迎大家討論交流~?文章來源地址http://www.zghlxwxcb.cn/news/detail-808864.html

到了這里,關(guān)于【教程】微信小程序如何拍攝圖片及視頻并上傳到后臺進(jìn)行存儲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uniapp上傳手機(jī)相冊圖片、視頻或拍攝圖片、視頻上傳

    uniapp上傳手機(jī)相冊圖片、視頻或拍攝圖片、視頻上傳

    一開始想用現(xiàn)成組件uView的u-upload來實(shí)現(xiàn),做到一半發(fā)現(xiàn)使用這個(gè)組件上傳圖片沒有問題,可以滿足從相冊上傳、直接拍攝、預(yù)覽功能。但是,視頻好像不支持預(yù)覽,不知道是我寫法不對還是怎么回事/(ㄒoㄒ)/~~ 最終圖片使用的u-upload組件,視頻用了uniapp API 的 uni.chooseVideo()方法

    2024年02月03日
    瀏覽(29)
  • 微信小程序選擇本地圖片、視頻的最新方法chooseMedia,轉(zhuǎn)為為base64上傳到后端接口

    微信小程序選擇本地圖片、視頻的最新方法chooseMedia,轉(zhuǎn)為為base64上傳到后端接口

    微信的api變動(dòng)還是挺大的,之前選擇圖片的api wx.chooseImage 已被棄用,改為了 wx.chooseMedia ,本篇將介紹如何使用最新方法 wx.chooseMedia 進(jìn)行選擇圖片上傳并回顯,以及轉(zhuǎn)為為base64上傳到后端接口 wxml wxss js 上傳成功后,會返回一個(gè)數(shù)組,里面有圖片的 本地臨時(shí)路徑 效果圖: 有

    2023年04月20日
    瀏覽(26)
  • 微信小程序上傳圖片寫法

    小程序上傳圖片需要用到小程序API中的wx.uploadFile()方法。以下是一個(gè)基本的示例代碼: 在這個(gè)示例代碼中,首先使用wx.chooseImage()方法讓用戶選擇一張圖片,然后通過wx.uploadFile()方法將選中的圖片上傳到指定的接口地址。在上傳成功后,我們可以在success回調(diào)函數(shù)中獲

    2024年02月11日
    瀏覽(226)
  • 微信小程序上傳并顯示圖片

    微信小程序上傳并顯示圖片

    實(shí)現(xiàn)效果: 上傳前顯示: 點(diǎn)擊后可上傳,上傳后顯示: 源代碼:? .wxml

    2024年01月18日
    瀏覽(101)
  • 微信小程序上傳圖片壓縮方案

    小程序上傳圖片需要進(jìn)行壓縮,可以使用wx.getFileSystemManager()方法將圖片轉(zhuǎn)換成base64格式,再使用canvas將圖片壓縮成指定大小。 首先使用wx.chooseImage()方法選擇了一張圖片,然后使用wx.getFileSystemManager()方法將圖片轉(zhuǎn)換成base64格式。接著使用canvas進(jìn)行壓縮,并將canvas轉(zhuǎn)換成圖片

    2024年02月11日
    瀏覽(99)
  • 微信小程序原生上傳圖片和預(yù)覽+云函數(shù)上傳

    微信小程序原生上傳圖片和預(yù)覽+云函數(shù)上傳

    展示 ? ? 1.2.1 uploadPage 說明:調(diào)用方法就是屬性值是一個(gè)函數(shù),因此要注意this問題。要將this指向原來的位置。 展示? 說明:點(diǎn)擊上傳頁面展示,在這里我點(diǎn)擊了兩次?! ? 1.2.2uploadPreview 說明:需要學(xué)習(xí)Array.map方法的使用。 ?展示 說明:點(diǎn)擊圖片后全屏顯示? 1.2.3deleteImage按

    2024年02月06日
    瀏覽(363)
  • 微信小程序?qū)崿F(xiàn)圖片上傳(清晰版)

    在wxml文件中添加一個(gè)按鈕和一個(gè)image標(biāo)簽用于顯示上傳的圖片 在js文件中添加選擇圖片和上傳圖片的方法

    2023年04月16日
    瀏覽(89)
  • 微信小程序 圖片上傳與內(nèi)容安全審核

    微信小程序 圖片上傳與內(nèi)容安全審核

    之前有開發(fā)一個(gè)微信小程序,擁有圖片上傳的功能,上線運(yùn)行后一直表現(xiàn)良好,用戶漸漸增多。 但突然有一天,收到一個(gè)系統(tǒng)消息:提示我小程序存在內(nèi)容安全風(fēng)險(xiǎn),缺乏對不法違規(guī)內(nèi)容的過濾機(jī)制,需要整改,消息如下圖: 該消息是安全風(fēng)險(xiǎn)警告,需要限期內(nèi)進(jìn)行整改調(diào)

    2024年01月16日
    瀏覽(83)
  • 微信小程序?qū)ι蟼鞯膱D片進(jìn)行裁剪

    背景: 使用uniapp中uni.chooseImage的裁剪參數(shù)crop只能在App中生效,在微信小程序中不生效。 實(shí)現(xiàn)思路 uni.chooseImage 打開相冊獲取圖片路徑(uni.chooseImage(OBJECT) | uni-app官網(wǎng) (dcloud.net.cn)) 將獲取到的圖片路徑傳入 wx.cropImage 對圖片進(jìn)行裁剪(wx.cropImage(Object object) | 微信開放文檔 (q

    2024年02月04日
    瀏覽(21)
  • 微信小程序多圖片上傳實(shí)用代碼記錄

    由于在小程序中,wx.uploadFile 只能一次上傳一張圖片,因此在一次需要上傳多張圖片的應(yīng)用場景中例如商品圖片上傳、評論圖片上傳等場景下,不得不使用for等循環(huán)上傳每一張圖片,多次調(diào)用wx.uploadFile,由此引發(fā)了ajax的閉包問題。 我這代碼的設(shè)想是, 遍歷儲存上傳文件的

    2024年02月13日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包