3.2 KiB
Executable File
3.2 KiB
Executable File
文件代码在 src/file.js
起初采用axios进行图片的下载,但是axios在服务端不支持进度条,最后又换成了request请求。
export const downloadPic = async function (src, mainWindow) {
// 返回一个Promise方便处理
return new Promise((resolve, reject) => {
// 先检测目录,没有相关目录的话会自动创建新的目录
mkdirSync(hostdir)
// 自动重命名
let dstpath = `${hostdir}/${(new Date()).getTime()}_${(new Date()).getMilliseconds()}`
// webp格式的图片标志,500px下载的图片为webp格式的
let isWebp = false
// 判断图片格式
if (src.match('webp=true')) {
dstpath += '.webp'
isWebp = true
} else {
dstpath += '.jpg'
isWebp = false
}
// 已经接受的文件的大小
let receivedBytes = 0
// 文件总的字大小
let totalBytes = 0
// 创建一个文件流
const writeStream = fs.createWriteStream(dstpath, {
autoClose: true
})
// 创建一个请求
myRequest = request({
url: src,
headers: browserHeader,
})
myRequest.pipe(writeStream)
myRequest.on('response', (data) => {
// 更新总文件字节大小
totalBytes = parseInt(data.headers['content-length'], 10)
})
myRequest.on('data', (chunk) => {
// 更新下载的文件块字节大小
receivedBytes += chunk.length
// 更新进度条
mainWindow.webContents.send('datainfo', {
type: 'updaterProgress',
data: parseFloat(((receivedBytes / totalBytes) * 100))
})
})
myRequest.on('finish', () => {
myRequest = null
})
myRequest.on('error', () => {
reject()
})
writeStream.on('finish', () => {
writeStream.end()
myRequest = null
if (receivedBytes === totalBytes){
if (isWebp) {
// 将webp图片转成jpg图片
webp.dwebp(dstpath, dstpath.replace('webp', 'jpg'), '-o', (status) => {
// status 101->fails || 100->successful
if (status === '100'){
fs.unlink(dstpath, (err) => {
if (err) throw err
// console.log('文件已删除')
})
resolve(dstpath.replace('webp', 'jpg'))
} else {
reject()
}
})
} else {
resolve(dstpath)
}
} else {
fs.unlink(dstpath, (err) => {
if (err) throw err
})
// 更新进度条
mainWindow.webContents.send('datainfo', {
type: 'updaterProgress',
data: 0
})
reject()
}
})
})
}