first commit
This commit is contained in:
94
docs/zh-cn/save-image.md
Executable file
94
docs/zh-cn/save-image.md
Executable file
@@ -0,0 +1,94 @@
|
||||
#### 文件代码在 src/file.js
|
||||
|
||||
起初采用axios进行图片的下载,但是axios在服务端不支持进度条,最后又换成了request请求。
|
||||
|
||||
```js
|
||||
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()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user