2015-01-30 6 views
7

Я использую node-request и пытаюсь отправить файл в HDFS IBM, согласно this documentation.Что такое эквивалент curl --upload-file в node-request

Проходя этот JSON объект успешно затребовать загружать:

var options = { 
     method: 'put', 
     body: 'foo', 
     headers: { 
      'Content-Type': 'application/octet-stream', 
      'Transfer-Encoding': 'chunked' 
     } 
    }; 

И работает эта команда CURL успешно загружает файл, а также:

curl -v -X PUT -L -b cookie.jar "https://host:port/webhdfs/v1/tmp/myLargeFile.zip?op=CREATE&data=true" --header "Content-Type:application/octet-stream" --header "Transfer-Encoding:chunked" -T "file.txt"

Однако, пытаясь указать файл потока, как так:

var options = { 
     method: 'put', 
     headers: { 
      'Content-Type': 'application/octet-stream', 
      'Transfer-Encoding': 'chunked' 
     }, 
     multipart : [ 
      { body: fs.createReadStream(localFile) } 
     ] 
    }; 

терпит неудачу, и я не знаю, где я ошибаюсь. Как воспроизвести аргумент '--upload-file' из CURL с помощью запроса на узел?

ответ

6

Я поднял example on Github, который работает.

Суть в том, что вам нужен трубу файл в запрос:

fs.createReadStream(filePath).pipe(request.put(putURL,options,function(err, httpsResponse, body){ 
    if (err) { 
     console.log('err', err); 
    } else { 
     console.log(body); 
    } 
})); 

До сих пор не знает, как передать в файловом потоке в качестве опции в опционном Params, но это будет делать для меня!

- ОБНОВЛЕНИЕ -

Ничего себе, я чувствую себя как абсолютный идиот. Опция будет file. Да, это так просто.

+0

Где бы вы указали имя пользователя и пароль для удаленного URL-адреса? –