2014-10-31 57 views
2

我試圖自動發佈以編程方式創建的Github版本上的一些資源。如何將資產上傳到node.js的github發佈版本

這裏是我的上傳功能:

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 /密碼

我查了一下網址

我雖然可能是因爲SNI,但我不知道如何檢查。

任何線索?謝謝 !

回答

3

我找不到低級別的node.js模塊,而是使用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); 
    }); 

希望這將幫助別人:)

編輯於27/02/2015:我們最近從restler切換爲request

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可通過get request上的現有釋放或在the response directly after the release creation進行檢索。

+0

謝謝隊友! (-8 – 2015-02-27 03:49:36

+0

請問您可以指定您正在使用的API URL嗎?我試圖將發佈資產上載到現有版本v2.0.1並獲得404。是否有可能針對URL中的特定版本? – 2015-03-05 17:45:56

+0

感謝或您的幫助。我可以通過單獨的調用來獲取上傳URL,參見我的[發佈上傳腳本](https://github.com/sass/node-sass/commit/001174a8534288f3cecab0cd56a1f1840521bb3f)。 – 2015-03-07 16:07:17

相關問題