forked from wszxdhr/homepage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqiniuUpload.js
97 lines (86 loc) · 2.73 KB
/
qiniuUpload.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
const qiniu = require('qiniu')
const process = require('process')
const path = require('path')
const fs = require('fs')
const md5 = require('md5')
const accessKey = process.env.ACCESS_KEY
const secretKey = process.env.SECRET_KEY
console.log('key md5: ' + md5(accessKey + secretKey))
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const bucket = 'blog'
// 七牛上传
const getUploadToken = (filePath, fileName) => {
// 获取uploadToken
const options = {
scope: `${bucket}:${fileName}`
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)
return uploadToken
}
const distDir = path.join(__dirname, 'dist')
const uploadFile = (filePath, fileName) => {
const uploadToken = getUploadToken(filePath, fileName)
if (uploadToken) {
console.log('uploadToken获取成功:' + filePath)
}
const config = new qiniu.conf.Config()
// 空间对应的机房
config.zone = qiniu.zone.Zone_z0
// 是否使用https域名
config.useHttpsDomain = true
// 上传是否使用cdn加速
// config.useCdnDomain = true
const formUploader = new qiniu.form_up.FormUploader(config)
const putExtra = new qiniu.form_up.PutExtra()
// 文件上传
formUploader.putFile(uploadToken, fileName, filePath, putExtra, (respErr,
respBody, respInfo) => {
if (respErr) {
console.log(respErr)
throw respErr
}
if (respInfo.statusCode === 200) {
// console.log(respBody)
console.log('文件上传成功:' + fileName)
} else {
console.log(respInfo.statusCode)
console.log(respBody)
}
})
}
/**
* 文件遍历方法
* @param filePath 需要遍历的文件路径
*/
function fileDisplay (filePath) {
// 根据文件路径读取文件,返回文件列表
fs.readdir(filePath, function (err, files) {
if (err) {
console.warn(err)
} else {
// 遍历读取到的文件列表
files.forEach(function (filename) {
// 获取当前文件的绝对路径
const filedir = path.join(filePath, filename)
// 根据文件路径获取文件信息,返回一个fs.Stats对象
fs.stat(filedir, function (eror, stats) {
if (eror) {
console.warn('获取文件stats失败')
} else {
const isFile = stats.isFile() // 是文件
const isDir = stats.isDirectory() // 是文件夹
if (isFile) {
console.log('正在尝试上传:' + filename)
uploadFile(filedir, filedir.replace(distDir + '/', ''))
}
if (isDir) {
fileDisplay(filedir) // 递归,如果是文件夹,就继续遍历该文件夹下面的文件
}
}
})
})
}
})
}
fileDisplay(distDir)