11const https = require ( 'https' ) ;
2+ const fetch = require ( 'node-fetch' ) ;
23const DataStore = require ( '../app-store' ) ;
34const dataStore = new DataStore ( ) ;
45const FormData = require ( 'form-data' ) ;
56const fs = require ( 'fs' ) ;
67
8+ const extMap = {
9+ 'jpg' : 'jpeg' ,
10+ 'jpeg' : 'jpeg' ,
11+ 'png' : 'png' ,
12+ 'gif' : 'gif' ,
13+ }
14+
715//上传图片到CSDN
816function uploadPictureToCSDN ( filePath ) {
917 return new Promise ( ( resolve , reject ) => {
10- let formData = new FormData ( ) ;
11- formData . append ( 'file' , fs . createReadStream ( filePath ) ) ;
18+ const ext = extMap [ filePath . split ( '.' ) . pop ( ) . toLowerCase ( ) ] || 'png' ;
1219
13- let headers = formData . getHeaders ( ) ;
14- headers . Cookie = dataStore . getCSDNCookies ( ) ; //获取Cookie
15- headers [ "user-agent" ] = "Mozilla/5.0" ;
16- //自己的headers属性在这里追加
17- let request = https . request ( {
18- host : 'blog-console-api.csdn.net' ,
19- method : 'POST' ,
20- path : '/v1/upload/img?shuiyin=2' ,
21- headers : headers
22- } , function ( res ) {
23- let str = '' ;
24- res . on ( 'data' , function ( buffer ) {
25- str += buffer ;
26- }
27- ) ;
28- res . on ( 'end' , ( ) => {
29- if ( res . statusCode === 200 ) {
30- const result = JSON . parse ( str ) ;
31- if ( result . code === 200 ) {
32- const url = result . data . url ;
33- resolve ( url )
34- } else {
35- reject ( '上传图片失败,' + result . msg )
36- }
37- } else {
38- console . log ( filePath ) ;
39- try {
40- const result = JSON . parse ( str ) ;
41- reject ( decodeURI ( result . msg ) )
42- } catch ( e ) {
43- }
44- reject ( '上传图片失败:' + res . statusCode )
45- }
46- } ) ;
47- } ) ;
48- formData . pipe ( request ) ;
20+ fetch ( "https://imgservice.csdn.net/direct/v1.0/image/upload?watermark=&type=blog&rtype=markdown" , {
21+ "headers" : {
22+ "content-type" : "application/json" ,
23+ "x-image-app" : "direct_blog" ,
24+ "x-image-dir" : "direct" ,
25+ "x-image-suffix" : ext ,
26+ "cookie" : dataStore . getCSDNCookies ( ) ,
27+ "Referer" : "https://editor.csdn.net/" ,
28+ }
29+ } ) . then ( result => result . json ( ) )
30+ . then ( result => {
31+ console . log ( 'get access info:' , result ) ;
32+ if ( result . code === 200 ) {
33+ const accessId = result . data . accessId ;
34+ const callbackUrl = result . data . callbackUrl ;
35+ const remoteFilePath = result . data . filePath ;
36+ const url = result . data . host ;
37+ const policy = result . data . policy ;
38+ const signature = result . data . signature ;
4939
50- request . on ( 'error' , function ( e ) {
51- reject ( '网络连接异常' + e . message )
52- } ) ;
40+ let formData = new FormData ( ) ;
41+ formData . append ( 'key' , remoteFilePath ) ;
42+ formData . append ( 'OSSAccessKeyId' , accessId ) ;
43+ formData . append ( 'policy' , policy ) ;
44+ formData . append ( 'signature' , signature ) ;
45+ formData . append ( 'success_action_status' , '200' ) ;
46+ formData . append ( 'callback' , callbackUrl ) ;
47+ formData . append ( 'file' , fs . createReadStream ( filePath ) ) ;
48+
49+ let headers = formData . getHeaders ( ) ;
50+ headers . Cookie = dataStore . getCSDNCookies ( ) ;
51+ headers [ "user-agent" ] = "Mozilla/5.0" ;
52+ headers . Referer = "https://editor.csdn.net/" ;
53+ headers . ContentType = 'multipart/form-data' ;
54+ headers . Accept = 'application/json' ;
55+
56+ // post formData to host
57+ fetch ( url , {
58+ method : 'POST' ,
59+ body : formData ,
60+ headers : headers
61+ } ) . then ( result => result . json ( ) )
62+ . then ( result => {
63+ if ( result . code === 200 ) {
64+ resolve ( result . data . imageUrl )
65+ } else {
66+ reject ( '上传图片失败,' + result . msg )
67+ }
68+ } )
69+ . catch ( error => {
70+ reject ( '上传图片失败,' + error )
71+ } )
72+ } else {
73+ reject ( '上传图片失败,' + result . msg )
74+ }
75+ } )
76+ . catch ( error => {
77+ reject ( '上传图片失败,' + error )
78+ } )
5379 } )
5480}
5581
@@ -120,4 +146,4 @@ function publishArticleToCSDN(title, markdowncontent, content, isPublish) {
120146}
121147
122148exports . uploadPictureToCSDN = uploadPictureToCSDN ;
123- exports . publishArticleToCSDN = publishArticleToCSDN ;
149+ exports . publishArticleToCSDN = publishArticleToCSDN ;
0 commit comments