const http = require('http') const crypto = require('crypto') const EverNote = require('evernote'); const client = new EverNote.Client({ sandbox: false, china: true, token: '你的token咯' }) const noteStore = client.getNoteStore('生成token时会自动有个链接') http.createServer(function(req, res) { console.log(req.url) if (req.url.startsWith('/snapshot')) { return uploadImageToEverNote(req, res) } res.end('hello world') }).listen(4000) function getBody(req) { return new Promise((resolve, reject) => { let rawData = ''; req.on('data', (chunk) => { rawData += chunk; }); req.on('end', () => { try { const parsedData = JSON.parse(rawData) resolve(parsedData) } catch (e) { reject(e.message) console.error(e.message); } }) }) } async function uploadImageToEverNote(req, res) { const body = await getBody(req) let nBody = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd"> <en-note> `; // Create note object const ourNote = new EverNote.Types.Note(); ourNote.title = body.title; const resources = body.resources const noteResources = [] if (resources && resources.length > 0) { nBody += "<br /><br />"; for (let resource of resources) { // 使用的base64上传,也可以在Server端保存 const buffer = new Buffer(resource.replace('data:image/jpeg;base64,', ''), 'base64') const md5 = crypto.createHash('md5'); md5.update(buffer); const hexhash = md5.digest('hex'); nBody += `<en-media type="image/jpeg" hash="${hexhash}" />` const resourceBody = new EverNote.Types.Resource() resourceBody.mime = 'image/jepg' // 需要正确设置,不然可能是被已附件形式,而不是展示图片 const resourceData = new EverNote.Types.Data() resourceData.body = buffer resourceData.size = buffer.length resourceBody.data = resourceData noteResources.push(resourceBody) } } ourNote.resources = noteResources ourNote.content = nBody + '</en-note>'; const noteRes = await noteStore.createNote(ourNote).catch(err => console.error(err)); console.log(noteRes.resources) res.setHeader('content-type', 'application/json') res.end('{done: true}') }
node 印象笔记 上传图片
58 min read