NodeJs——使用axios下载上传文件

简介: NodeJs——使用axios下载上传文件

前言

好记性不如烂笔头~

内容

axios封装 | request.js

import axios from "axios";
import staticPath from "../config/staticPath";
import {getConfig} from "./config";
const request = axios.create({
    baseURL: staticPath.BaseApi,
    timeout: 20000,
    adapter: require('axios/lib/adapters/http')
})
// 异常拦截处理器
const errorHandler = error => {
    error.response && console.error(`errorHandler: ${error.response.status}, ${error.response.data.message}`)
    return Promise.reject(error)
}
// 请求拦截器
request.interceptors.request.use(config => {
    if (!config.headers['Content-Type'])  config.headers['Content-Type'] = 'application/json'
    // 我这里存在多种baseURL的情况,所以根据渠道来进行判断使用不同的域名
    if (config.requestBase) {
        let configData = getConfig()xxx
        if (staticPath.Channel === 'channel1xxxx') config.baseURL = configData.xxx_oss_host || ''
        if (staticPath.Channel  === 'default') config.baseURL = configData.xxxx_upload_host || ''
    }
    return config
}, errorHandler)
// 响应拦截器
request.interceptors.response.use(response => {
    if (response.data.streams && response.data.format) {
        return response.data
    }
    // 我这里response.data.success是结合服务端自定义的返回字段来进行判断,不涉及可以直接干掉
    if (response.status !== 200 || !response.data.success) {
        return Promise.reject(response.data)
    }
    return response.data
}, errorHandler)
export default request

API封装 | api.js

import request from '../utils/request';
import fs from "fs";
const FormData = require('form-data')
const Api = {
    getConfig : '/im/machines/new',
    uploadFile: '/file/upload',
    getFileLink: '/file/getResources',
}
/**
 * 获取小助手配置信息
 * @param {object} data 请求数据
 * @return {AxiosPromise}
 */
export function getConfigInfo(data) {
    return request({
        url: Api.getConfig,
        method: 'POST',
        data: data
    })
}
/**
 * 文件下载
 * @param {string} url 文件链接地址
 * @return {AxiosPromise}
 */
export function getFileDownloadURL(url) {
    return request({
        url: url,
        method: 'GET',
        responseType: 'stream'
    })
}
/**
 * 上传文件
 * @param {string} filePath 本地文件路径
 * @return {AxiosPromise}
 */
export function uploadMsgFile(filePath) {
    let formData = new FormData()
    formData.append('multipartFile', fs.createReadStream(filePath))
    let headers = formData.getHeaders()
    return request({
        url: Api.uploadFile,
        method: 'POST',
        data: formData,
        headers: headers,
        requestBase: true
    })
}
/**
 * 获取文件下载地址
 * @param {string} params 文件的KEY
 * @return {AxiosPromise}
 */
export function getFileLink(params) {
    return request({
        url: Api.getFileLink,
        method: 'GET',
        params: params,
        requestBase: true
    })
}

使用示例

// 正常使用
import {getConfigInfo} from "../api";
getConfigInfo({...staticPath.WeComHelperInfo}).then(r => { console.log(r) }).catch(err => console.error(`getConfigInfo: 获取配置文件请求异常${JSON.stringify(err)}`))
// 下载文件
 const streamWriter = fs.createWriteStream(localFile)
 let response = await getFileDownloadURL(url).catch(error => console.error(`getFileDownloadURL: 下载文件异常${JSON.stringify(error)}`))
 response.pipe(streamWriter)
 streamWriter.on('finish', () => {console.log('下载完成') })
 streamWriter.on('error', error => console.error(`streamWriter: 文件写入异常${error}`))

学无止境,谦卑而行.

目录
相关文章
|
7月前
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
417 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
7月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
227 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
7月前
|
JavaScript 前端开发
Node.js 中实现多任务下载的并发控制策略
Node.js 中实现多任务下载的并发控制策略
169 15
|
11月前
|
JavaScript 算法 内存技术
如何降低node.js版本(nvm下载安装与使用)
如何降低node.js版本(nvm下载安装与使用)
|
存储 JSON JavaScript
学习node.js十三,文件的上传于下载
学习node.js十三,文件的上传于下载
|
JavaScript
NodeJs——如何下载文件
NodeJs——如何下载文件
246 4
|
Web App开发 JavaScript 前端开发
入职必会-开发环境搭建29-Node.js下载和安装
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它提供了一种异步、事件驱动的编程模型,使得开发者能够构建高性能、可扩展的网络应用程序。
186 0
|
前端开发
用axios请求node做的简单网络接口教学易懂
用axios请求node做的简单网络接口教学易懂
283 0
|
2月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
774 11
|
7月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。

热门文章

最新文章

  • 1
    vue引入axios出现Module parse failed: Unexpected token (5:2)
    435
  • 2
    基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
    176
  • 3
    Vue中的axios深度探索:从基础安装到高级功能应用的全面指南
    265
  • 4
    JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
    1071
  • 5
    若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
    593
  • 6
    axios发送post请求,如何接受和返回一个axios的字段,解决bug的方法,困难的事情先从简单做起,先从发送一个axios的post请求做起,解决方法查别人的资料,查看F12看network就行
    128
  • 7
    文本,前后端数据交互,简单请求,如何去给data数据赋值,在mounted()里赋值,利用axios发送的请求,res就是数据集,就是后端的数据,this.users = res.data.data
    107
  • 8
    Request failed with status code 400,使用axios.post要发送参数,认真比对原项目,看看有没有忘记什么?
    360
  • 9
    vue3 在 watchEffect 里中断未完成的 axios 请求(只保留最后一次请求的方法---连续点击查询按钮的优化)
    255
  • 10
    前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
    139