2015-02-04 3 views
0

일반적으로 restler.post()는 restler.file (...) 객체를 사용하여 POST를 전송합니다. 이 작업은 서버에 파일 경로가있는 경우 작동합니다. 예를 들어클라이언트에서 restler.file 파일을 보낼 수 있습니까?

:

//############################################################################# 
// Video upload from file system on node console server 
//############################################################################# 

function(done){ 

    var fileStats = fs.statSync(videoFileName); 
    var fileSizeInBytes = fileStats["size"]; 

    var data = { 
    'name': objectVideoName, 
    'type':'video', 
    'content': 'application/mp4', 
    'file': restler.file(videoFileName, null, fileSizeInBytes, null, "video") 
    }; 


    restler.post('https://api.astra.io/v0/bucket/'+bucketName+'/object', { 
    multipart: true, 
    data : data, 
    headers : { "Astra-Secret": astraSecret } 
    }).on('complete', function(response) { 
    console.log('Upload video to bucket: \n', response); 
    done(null); 
    }); 

}, 

어떻게 서버에 저장하지 않고 직접 클라이언트에서 파일을 게시 할 수 있습니까?

나는 busboy와 함께 노력하고 있습니다. 데이터 옵션을 만들 수 있도록 restler 보낸 두 도우미 기능

//############################################################################# 
// Video upload from client then POST to cdn 
//############################################################################# 
app.post('/addVideo', function (req, res) { 

var video = {}; 
var busboy = new Busboy({headers: req.headers}); 

busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { 

    var ext = mimetype.split('/').pop(); 
    var token = generateToken(crypto); 

    var fileSizeInBytes = 900000; 

    filename = token + ext; 

    var videoName = filename; 

    var bucketName = 'sampleVideos'; 

    var data = { 
     'name': videoName, 
     'type':'video', 
     'content': 'application/mp4', 
     'file': ***** WHAT GOES HERE ****** 
    }; 

    restler.post('https://api.astra.io/v0/bucket/'+bucketName+'/object', { 
     multipart: true, 
     data : data, 
     headers : { "Astra-Secret": astraSecret } 
    }).on('complete', function(response) { 
     console.log('Upload video to bucket: \n', response); 
     res.send("200"); 
    }); 

}); 

busboy.on('field', function (fieldname, val, fieldnameTruncated, valTruncated) { 
    video[fieldname] = val; 
}); 

busboy.on('finish', function() { 
    console.log('busboy finished'); 
}); 

req.pipe(busboy); 

}); 

답변

-1

있다. 둘 중 하나를 사용하거나 JS Object 리터럴을 지정하지 마십시오. restler.data()는 당신이 그것을 대신 파일 이름의 임의의 내용을 사용할 수 있습니다 당신은이 작업을 수행 할 것입니다 귀하의 예제에서

data: function(filename, contentType, data) { 
    return new Data(filename, contentType, data); 
} 

그래서 대신

var data = { 
    'name': videoName, 
    'type':'video', 
    'content': 'application/mp4', 
    'file': ***** WHAT GOES HERE ****** 
}; 

를 사용하고자하는 것입니다

var data = restler.data(videoName, 'application/mp4', file); 
+0

문제는 이미 그것을 포함합니다. 문제는 버스 정류장에서 대기업으로 보내는 방법입니다. –

+0

아니요, JS 객체 리터럴을 사용합니다. 나는 대답을 명확하게하기 위해 대답을 업데이트 할 것이다. –

+0

나는 그것을 밖으로 시도 할 것이다. –

관련 문제