微信小程序开发(二)图片上传+服务端接收详解

我来为您详细讲解“微信小程序开发(二)图片上传+服务端接收详解”的完整攻略。

文章概述

本文主要介绍微信小程序中图片上传的方法,以及服务端接收图片的实现方法。主要包括以下内容:

  1. 小程序中基于wx.chooseImage()实现图片上传
  2. 服务端使用Node.js and express框架来接收图片并保存

小程序中基于wx.chooseImage()实现图片上传

在微信小程序中,使用wx.chooseImage()方法来选取本地图片并上传到服务器,该方法的主要调用方式如下所示:

wx.chooseImage({
  count: 1,   // 最多可以选择的图片张数
  sizeType: ['original', 'compressed'],  // 可以指定是原图还是压缩图,默认二者都有
  sourceType: ['album', 'camera'],  // 可以指定来源是相册还是相机,默认二者都有
  success: function (res) {
    // 图片上传成功之后的操作
  },
  fail: function (res) {
    // 图片上传失败之后的操作
  }
})

成功选择图片后,我们可以通过wx.uploadFile()方法将图片上传到指定的服务器上,该方法主要调用方式如下所示:

wx.uploadFile({
  url: '服务器地址',    // 上传图片的服务器地址
  filePath: '要上传的图片的本地路径',   // 要上传的图片的本地路径
  name: '图片文件在后台对应的名称,如file',   // 上传图片文件时的参数名称
  formData: {
    'user': 'test'   // 上传图片的其他参数
  },
  success: function (res) {
    //图片上传成功之后的操作
  },
  fail: function (res) {
    //图片上传失败之后的操作
  }
})

下面,举一个实例来说明如何使用wx.chooseImage()方法进行图片上传:

wx.chooseImage({
  count: 1,
  success: function(res) {
    var tempFilePaths = res.tempFilePaths;
    console.log('选择图片的路径为:', tempFilePaths[0]);
    wx.uploadFile({
      url: 'http://localhost:3000/upload',
      filePath: tempFilePaths[0],
      name: 'file',
      header: {
        'content-type': 'multipart/form-data'
      },
      formData: {
        'user': 'test'
      },
      success: function(res) {
        var data = res.data;
        console.log('图片上传成功后的响应内容为:', data);
      },
      fail: function(res) {
        console.log('图片上传失败:', res);
      }
    })
  },
  fail: function(res) {
    console.log('获取图片失败:', res);
  }
})

服务端使用Node.js and express框架来接收图片并保存

服务端使用Node.js and express框架来接收图片并保存的代码实现如下:

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');

const app = express();
const upload = multer({
  storage: multer.diskStorage({
    // 自定义上传位置
    destination: function(req, file, cb) {
      cb(null, './uploads'); // 保存到uploads文件夹下
    },
    // 自定义上传的文件名称
    filename: function(req, file, cb) {
      const fileNameArr = file.originalname.split('.');
      const extensionName = fileNameArr[fileNameArr.length - 1];
      const filename = Date.now() + '_' + Math.floor(Math.random() * (99999 - 10000 + 1) + 10000) + '.' + extensionName;
      cb(null, filename);
    }
  })
});

// 设置允许跨域访问该服务
app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  next();
});

// 解析post请求参数
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// 处理上传图片的请求
app.post('/upload', upload.single('file'), function(req, res, next) {
  if(req.file) {
    console.log('文件上传成功:', req.file);
    res.json({
      status: 200,
      message: 'file upload success',
      data: {
        filename: req.file.filename
      }
    });
  } else {
    console.log('文件上传失败:', err);
    res.json({
      status: 500,
      message: 'file upload fail'
    });
  }
});

// 启动服务
app.listen(3000, function() {
  console.log('服务已经启动,可以通过 http://localhost:3000 进行访问');
})

此时,我们就通过使用Node.js and express框架成功实现了服务端的接收图片并保存操作。服务运行起来后,运行如下的测试代码查看图片是否成功上传:

const http = require('http');
const fs = require('fs');
const path = require('path');

const options = {
  hostname: 'localhost',
  port: 3000,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data'
  }
};

const req = http.request(options, (res) => {
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`响应主体: ${chunk}`);
  });
  res.on('end', () => {
    console.log('响应中已无数据。');
  });
});

req.on('error', (e) => {
  console.error(`请求遇到问题: ${e.message}`);
});
const filepath = path.join(__dirname, 'images/avatar.png');
const boundaryKey = Math.random().toString(16);
const enddata = '\r\n----' + boundaryKey + '--';

var fileStream = fs.createReadStream(filepath);
var length = fs.statSync(filepath).size;
req.setHeader('content-type', 'multipart/form-data; boundary=--' + boundaryKey);
req.setHeader('Content-Length', length + Buffer.byteLength(enddata));
req.setHeader('Pragma', 'no-cache');
req.setHeader('Cache-Control', 'no-cache');
fileStream.addListener('data', function(chunk) {
  req.write(chunk);
});

fileStream.addListener('close', function() {
  req.end(enddata);
});

以上就是本篇文章对“微信小程序开发(二)图片上传+服务端接收详解”的完整攻略讲解,希望能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序开发(二)图片上传+服务端接收详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • PHP实现的各类hash算法长度及性能测试实例

    PHP实现的各类hash算法长度及性能测试实例 算法简介 Hash算法是一种将任意长度的二进制值映射为固定长度较小的二进制值的算法。Hash算法将任意长度的数据(消息)压缩到一个长度固定、较短的数据串中。常见的哈希算法有MD5、SHA-1、SHA-256等。 下面我们将具体介绍PHP实现的各类Hash算法的长度及性能测试实例。 算法列表 以下是PHP中可用的…

    PHP 2023年5月26日
    00
  • PHP设计模式中观察者模式详解

    PHP设计模式中观察者模式详解 观察者模式是一种行为型设计模式,它允许对象在状态发生改变时自动通知它对象。在PHP中,观察者模式通常用于实现事件驱动的编程模型。 观察者模式的实现 观察者模式通常由两个主要组件组成:主题和观察者。主题是一个对象,维护一组观察者,并状态发生改变时通知它们。观察者是一个接口,它定义了在主题状态发生变时需要执行的操作。 以下是察者模…

    PHP 2023年5月12日
    00
  • php array_walk 对数组中的每个元素应用用户自定义函数详解

    PHP中的array_walk函数是一个很强大的函数,它可以对PHP中的数组或对象中的每个元素应用用户自定义函数。它可以让开发人员对数组元素执行某个操作,并且更加高效和灵活。 基本语法格式 array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : b…

    PHP 2023年5月26日
    00
  • 微信小程序 input表单与redio及下拉列表的使用实例

    我来为你详细讲解 “微信小程序 input表单与redio及下拉列表的使用实例”的完整攻略。 1. input表单的使用 下面是一个简单的 input 表单示例: <view class="form-item"> <view class="form-item-label">姓名</view…

    PHP 2023年5月30日
    00
  • php fread读取文件注意事项

    当我们使用PHP的fread函数读取文件时,需要注意以下几点: 1. 首先要打开文件 使用fread函数之前必须先通过fopen函数打开文件: $handle = fopen("example.txt", "r"); 其中第一个参数是文件名(可以包含路径),第二个参数是打开模式,这里我们使用”r”表示只读模式。如果文件…

    PHP 2023年5月26日
    00
  • PHP生成便于打印的网页

    生成便于打印的网页是一个常见的需求,因为人们需要将网页内容以纸质形式保存、打印或分享。下面将详细讲解如何使用PHP生成便于打印的网页。 1. 添加打印样式表 为了生成便于打印的网页,我们需要添加一个专门用于打印的样式表。打印样式表可以控制打印时网页的样式和布局,以便适应纸质打印。以下是一个示例的打印样式表: @media print { /* 隐藏网页顶部和…

    PHP 2023年5月26日
    00
  • 微信小程序进行微信支付的步骤昂述

    如果你在微信小程序中需要实现微信支付功能,可以按照以下步骤进行操作: 1.在微信商户平台中注册一个账号并获取商户号。在注册商户平台账号时需要提供相关资料,包括公司名称、法人姓名、营业执照证件等。商户号是唯一标识商户的一串数字,需要保密保存。 2.开通微信支付功能并获取相关的密钥。在商户平台中开通微信支付功能后会自动生成商户API密钥,需要妥善保管该密钥。 3…

    PHP 2023年5月23日
    00
  • 微信小程序实现签到功能

    下面我将讲解如何在微信小程序中实现签到功能。 一、项目搭建1. 创建一个新的微信小程序项目2. 在 app.json 中配置 tabBar,方便用户在小程序中切换签到页面与其他页面 二、签到页面设计1. 在 pages 文件夹下创建一个签到页面 sign-in,以及一个签到成功页面 sign-in-success2. 在 sign-in 页面中,设置倒计时以…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部