如何将资源上传到node.js的github发行版

我正试图自动发布一些Github版本的资源,我编程创build。

这是我的上传function:

function uploadFile(fileName, uploadUrl, callback){ var uploadEndPoint = url.parse(uploadUrl.substring(0,uploadUrl.indexOf('{'))); options.host = uploadEndPoint.hostname; options.path = uploadEndPoint.pathname+'?name=' + fileName; options.method = 'POST'; options.headers['content-type'] = 'application/zip'; var uploadRequest = https.request(options, callback); uploadRequest.on('error', function(e) { console.log('release.js - problem with uploadRequest request: ' + e.message); }); var readStream = fs.ReadStream(path.resolve(__dirname,'builds',fileName)); readStream.pipe(uploadRequest); readStream.on('close', function () { req.end(); console.log('release.js - ' + fileName + ' sent to the server'); }); } 

在这个结尾我得到一个404没有find

我尝试从令牌和用户/密码身份validation

我检查了url

我虽然可能是因为SNI,但我不知道如何检查。

任何线索? 谢谢 !

我通过不使用低层node.js模块find了解决这个问题的方法,而是使用restler这个处理SNI的库。

这里是如何使用它:

  rest = require('restler'), path = require('path'), fs = require('fs'); fs.stat(path.resolve(__dirname,'builds',fileName), function(err, stats){ rest.post(uploadEndPoint.href+'?name=' + fileName, { multipart: true, username: GITHUB_OAUTH_TOKEN, password: '', data: rest.file(path.resolve(__dirname,'builds',fileName), null, stats.size, null, 'application/zip') }).on('complete', callback); }); 

希望能帮助别人:)

编辑于2015年2月27日:我们最近从restler切换到要求 。

 var request = require('request'), fs = require('fs'); var stats = fs.statSync(filePath); var options = { url: upload_url.replace('{?name}', ''), port: 443, auth: { pass: 'x-oauth-basic', user: GITHUB_OAUTH_TOKEN }, json:true, headers: { 'User-Agent': 'Release-Agent', 'Accept': 'application/vnd.github.v3+json', 'Content-Type': 'application/zip', 'Content-Length': stats.size }, qs: { name: assetName } }; // Better as a stream fs.createReadStream(filePath).pipe(request.post(options, function(err, res){ // Do whatever you will like with the result })); 

upload_uri可以通过对现有版本的获取请求或创build版本后的响应直接进行检索。