X3R0
X3R0

Reputation: 6334

CURL Command to NodeJS - PUT Request OctetStream

I need to make this curl command into a nodejs request, either using fetch, request or axios networking libraries

The request needs to PUT the file data to the URL

curl -v -H "Content-Type:application/octet-stream" --upload-file C:/Users/deanv/Pictures/test3.mp4 "https://www.example.com/file/upload"

I've tried using CurlConverter to convert my curl command to node code, but this doesn't work as I cant add the file data.

var fetch = require('node-fetch');

fetch('https://www.example.com/file/upload', {
    method: 'PUT',
    headers: {
        'Content-Type': 'application/octet-stream'
    }
});

All help appreciated. Thanks in advance.

Upvotes: 0

Views: 566

Answers (1)

traynor
traynor

Reputation: 8682

Try this:

// setup modules
const fetch = require('node-fetch');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');

// setup paths
const pathToFile = 'C:/Users/deanv/Pictures/test3.mp4';
const uploadUrl = 'https://www.example.com/file/upload';

// create form, 'content-type' header will be multipart/form-data
const form = new FormData();

// read the file as stream
const fileStream = fs.createReadStream(path.resolve(pathToFile));

// add the file to the form
form.append('my_file', fileStream);

fetch(uploadUrl, {
        method: 'PUT',
        body: form
    }).then((res) => {
        console.log('done: ', res.status);
        return res.text();
    })
    .then((res) => {
        console.log('raw response: ', res);
    })
    .catch(err => {
        console.log('err', err);
    });

Upvotes: 2

Related Questions