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

yizhihongxing

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

文章概述

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

  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日

相关文章

  • 微信小程序中添加客服按钮contact-button功能

    下面是微信小程序中添加客服按钮contact-button功能的完整攻略: 1. 前置条件 在开始添加客服按钮之前,你需要先完成以下工作: 确保已经有一个微信公众号,并已经通过微信公众平台开通客服功能。 将微信公众号绑定到小程序中。 2. 使用contact-button组件 在小程序中,我们可以使用官方提供的contact-button组件实现添加客服按钮…

    PHP 2023年5月23日
    00
  • 中国式家长各职业达成前置条件是什么 全职业达成必备技能一览

    “中国式家长各职业达成前置条件是什么 全职业达成必备技能一览” 前置条件 无论是哪一种职业,想要成为一个中国式的“好家长”,需要具备以下前置条件: 较高的教育背景:在中国式家长的定义中,教育背景是非常重要的一项,因为他们通常认为高学历可以带来更好的契机和未来。因此,如果想要成为一个中国式家长,一个良好的教育背景是必备的。 丰富的社会经验:一个成功的中国式家长…

    PHP 2023年5月26日
    00
  • 第三章 php操作符与控制结构代码

    第三章 “PHP操作符与控制结构代码” 是学习 PHP 编程语言过程中的重要一步。对于掌握 PHP 的基本语法和编码规范有着极为重要的作用。在本章节中,主要涵盖了 PHP 中各种语法结构和操作符,这对于编写高效的 PHP 代码至关重要。 1. PHP操作符 操作符是编程语言中经常使用的符号,它们用于计算和比较数据。在 PHP 中,常见的操作符包括数学操作符、…

    PHP 2023年5月23日
    00
  • 变量在 PHP7 内部的实现(二)

    以下是“变量在 PHP7 内部的实现(二)”的完整攻略。 什么是变量 变量是一个可存储数据的容器,在 PHP 中我们必须先声明变量然后再给其赋值。变量名称由一个美元符号 “$” 开始,后面跟着变量的名称。 在 PHP7 中,变量的实现是通过结构体 zval 实现的。zval(Zend Value)是 PHP 变量的内部表示,所有的 PHP 值都必须使用 zv…

    PHP 2023年5月25日
    00
  • PHP技术开发技巧分享

    PHP技术开发技巧分享攻略 如果你是一名希望使用 PHP 开发网页的开发人员,你一定会想要学习一些技巧和技术来帮助你更好、更快速地开发网页。这篇文章将分享一些我作为一名PHP开发者多年经验总结出来的技巧和技术,帮助你提高自己开发的效率。 1. 使用 Composer 来管理你的依赖 Composer 是 PHP 语言中使用最广泛的依赖管理工具之一。使用 Co…

    PHP 2023年5月23日
    00
  • 微信小程序实现表单校验功能

    微信小程序实现表单校验功能 什么是表单校验功能 表单校验是在提交表单之前,前端对表单内容进行合法性检查的过程。主要用于防止用户误操作或提交不规范的数据。常见的表单校验类型包括:非空校验、长度校验、格式校验等。 如何在微信小程序中实现表单校验功能 HTML部分 在HTML中,通过使用<form>、<input>等标签来构建表单。对于每个…

    PHP 2023年5月23日
    00
  • php给图片添加文字水印方法汇总

    下面是详细讲解”php给图片添加文字水印方法汇总”的完整攻略: 概述 在PHP中,添加水印是个非常常见的需求,特别是对于个人站点、博客等,我们可能经常需要对一些图片进行加水印的处理,以防止盗用或者恶意复制等。而在PHP中,处理图片也是非常方便的,无论是给图片添加文字水印还是给图片添加图片水印,都可以轻松实现。在这里,我们来介绍下PHP给图片添加文字水印的方法…

    PHP 2023年5月26日
    00
  • php让图片可以下载的代码

    下面是 PHP 实现图片下载的完整攻略。 第一步:确定需要下载的图片地址 在 PHP 中,我们可以利用 $_GET 变量获取请求参数,例如可以这样获取图片地址: $ImageUrl = $_GET["url"]; 第二步:获取图片信息并设置 HTTP 头 获取图片信息需要使用 getimagesize 函数,代码示例如下: header(…

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