Node文件操作

8 篇文章 0 订阅
4 篇文章 0 订阅

Node的一些文件操作问题

常用的读取文件的模块:fs

压缩一个文件

使用的是node-archiver

链接:https://github.com/archiverjs/node-archiver

/**
  * 将目标文件夹打包
  * @param dirname 所需要打包文件或文件夹所在的目录
  * @param filename 所需打包的文件/目录名称,也是打包后的zip名称
  */
 static async zip(dirname:string,filename:string){
      let archive = archiver('zip', {
          zlib: { level: 9 } // 设置压缩级别
       });
       let output = fs.createWriteStream(dirname+`/${filename}.zip`);
       console.log("file is zipping!");
       archive.pipe(output);
       archive.directory(dirname+filename+"/",false);   
       await archive.finalize();

       console.log("Util.zip:"+fs.existsSync(dirname+`/${filename}.zip`));
}

文件哈希值

使用的是node-crypto

/**
  * 获取文件哈希值
  * @param path 
  * @returns 
  */
 function createFileHash256Sync(path:string):any {
    
    //读取一个Buffer
    const buffer = fs.readFileSync(path);
    const fsHash = crypto.createHash('sha256');
 
    fsHash.update(buffer);
    const md5 = fsHash.digest('hex');
    return md5;
 }

使用Form-Data发送压缩文件

使用node-FormData模块

一定记得 import FormData = require(“form-data”); 不然自带的form-data内容只支持blob或者string

传递readStream

// 填充文件
form.append("file",fs.createReadStream(zipPath),{
     contentType:"application/octet-stream"
 });


//	如果使用form-data传递json对象,要转换成string进行传递
//  填充参数
form.append("parameters", JSON.stringify({
       "filehash":filehash,
       "boardType":config.boardType,
        "compileType":config.compileType
      }),{
         contentType:"application/json"
});

封装好之后进行发送时发现node-fetch不支持form-data,request支持的formData格式非常简单不是我们用的那种封装好的from-data,所以这里使用其他方式发送请求。

form-data发送请求
let form = new FormData();
form.append("file", fs.createReadStream(zipPath));
// 向C提交文件数据
form.submit('http://10.33.200.1:8700/api/upload', function(err, res) {
      res.resume();
      return res.send({
      code:200,
      message:'成功'
   })
});
got发送请求

使用got模块

链接:https://github.com/sindresorhus/got

npm install got
import {FormData} from "formdata-node"

// I assume Got >= 12.x is used for this example
import got from "got"

const form = new FormData()

form.set("greeting", "Hello, World!")

const data = await got.post("https://httpbin.org/post", {body: form}).json()

console.log(data.form.greeting) // => Hello, World!
编码后使用fetch
import {Readable} from "stream"

import {FormDataEncoder} from "form-data-encoder"
import {FormData} from "formdata-node"

// Note that `node-fetch` >= 3.x have builtin support for spec-compliant FormData, sou you'll only need the `form-data-encoder` if you use `node-fetch` <= 2.x.
import fetch from "node-fetch"

const form = new FormData()

form.set("field", "Some value")

const encoder = new FormDataEncoder(form)

const options = {
  method: "post",
  headers: encoder.headers,
  body: Readable.from(encoder)
}

await fetch("https://httpbin.org/post", options)
File对象发送fetch
import {FormData, File} from "formdata-node" // You can use `File` from fetch-blob >= 3.x

import fetch from "node-fetch"

const form = new FormData()
const file = new File(["My hovercraft is full of eels"], "file.txt")

form.set("file", file)

await fetch("https://httpbin.org/post", {method: "post", body: form})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值