【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

下面这个例子既写明如何利用 node.js 上传本地图片到服务器,又将 http 异步请求方法改为同步。

上传图片主要借用的是 form-data 模块。

异步变同步主要还是利用 Promise 类与 async/await 关键字相结合。

const https = require('https');
const fs = require('fs')
const FormData = require('form-data') /**
* 上传图片到图壳
* 利用Promise和await将上传方法做成同步调用
* @param filePath
*/
function uploadPictureToImgKr(filePath) {
return new Promise((resolve, reject) => { const formData = new FormData()
formData.append('file', fs.createReadStream(filePath)) const headers = formData.getHeaders()
// 自定义请求头
// headers.Cookie = ''
headers['user-agent'] = 'Mozilla/5.0'
const request = https.request({
host: 'imgkr.com',
method: 'POST',
path: '/api/files/upload',
headers: headers
}, (response) => {
if (response.statusCode !== 200) {
// 手动消费数据
response.resume();
reject('上传图片失败,响应码' + response.statusCode)
return;
}
let body = '';
response.on('data', (buffer) => {
body += buffer;
});
response.on('end', () => {
resolve(body)
});
}); // 关键的一步
formData.pipe(request) request.on('error', (e) => {
reject('problem with request: ' + e.message)
});
})
} async function main(){
console.log('===开始上传图片===')
await uploadPictureToImgKr(`${__dirname}/img.jpg`).then(value => {
try {
console.log(JSON.parse(value))
} catch (e) {
console.log(value)
}
}).catch(reason => {
console.log(reason)
})
console.log('===上传图片结束===')
} main().then(r => console.log('===Main方法执行完毕==='))
console.log("===JS文件执行完毕===")

打印结果:

===开始上传图片===
===JS文件执行完毕===
{
code: 200,
message: '请求成功',
success: true,
data: 'https://imgkr.cn-bj.ufileos.com/1f04bb2e-f468-46d2-b86f-dd3494193583.jpg'
}
===上传图片结束===
===Main方法执行完毕===

版权声明

【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

最新文章

  1. Java技巧(代码简略)
  2. 一个github账户多台电脑代码提交
  3. Gif图片制作
  4. LoadRunner,一个简单的例子
  5. python高性能代码之多线程优化
  6. Xamarin.Forms——尺寸大小(五 Dealing with sizes)
  7. eclipse对Java程序的移植
  8. enter键实现自动登录
  9. A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列
  10. md5增加指定的加密规则,进行加密
  11. iOS开发之如何修改导航栏的内容
  12. 【三分模板】洛谷P3382三分模板
  13. Windows、Unix、Linux是什么类型的操作系统?
  14. spring对bean的管理细节
  15. Kubernetes 1.10.0离线安装
  16. History of program
  17. dasd
  18. PAT 1038 统计同成绩学生(20)(代码)
  19. js 社会主义点击事件
  20. OpenGL中的需要注意的细节问题

热门文章

  1. Win10下安装Linux子系统-Ubuntu
  2. [安卓安全] 01.安卓本地数据存储:Shared Preferences安全风险浅析
  3. JAVA自学笔记(1)
  4. php砍价算法、随机红包金额算法
  5. C实现进程间通信(管道; 共享内存,信号量)
  6. remote desktop能实现什么?远程桌面管理的意义是什么?
  7. Java实现 LeetCode 295 数据流的中位数
  8. Java实现 LeetCode 5 最长回文子串
  9. Java实现合并排序
  10. 【CSS】电脑、移动端公用样式