http-browserify icon indicating copy to clipboard operation
http-browserify copied to clipboard

Support `FormData`

Open ForbesLindesay opened this issue 12 years ago • 8 comments

Posting FormData can be done using something like:

  var fd = new FormData()
  fd.append('image', file)
  var req = new XMLHttpRequest()
  req.onload = function () {
    callback(null, req.responseText)
  }
  req.onerror = callback
  req.open('post', 'https://api.imgur.com:443/3/image.json')
  req.setRequestHeader('Authorization', 'Client-ID ' + clientID)
  req.send(fd)

However, I can see know way of handling FormData using the built in http module.

(see https://github.com/substack/node-browserify/issues/439)

ForbesLindesay avatar Jul 12 '13 01:07 ForbesLindesay

@ForbesLindesay take a look at mikeal/request. It does what you need with FormData, and has several nice examples.

jackcviers avatar Jul 12 '13 04:07 jackcviers

That's a server side library though, last I checked it wouldn't run on the client, and even if it does run on the client, requireing FormData on the client seems insane since it's already there.

What I'd like would be something where you could say:

var request = http.request(options)
request.end(FormData)

on the client.

ForbesLindesay avatar Jul 12 '13 04:07 ForbesLindesay

@ForbesLindesay I am curious. What exactly are you doing with the FormData object?

If you are uploading in the browser you can already do that with jquery or something similar with the browsers' FormData implementation. If you like the http lib on node, and you want to use it to upload something from the browser, use the request lib with browserify. It transparently handles the problems for you. I guess I don't know how adding a FormData-browserify to the browserify stack will solve your issue.

My point is how would you write this on node using a feature of http that would handle FormData differently than the way a post encoded in multipart would work in http-browserify? On Jul 11, 2013 11:37 PM, "Forbes Lindesay" [email protected] wrote:

That's a server side library though, last I checked it wouldn't run on the client, and even if it does run on the client, requireing FormData on the client seems insane since it's already there.

What I'd like would be something where you could say:

var request = http.request(options)request.end(FormData)

on the client.

— Reply to this email directly or view it on GitHubhttps://github.com/substack/http-browserify/issues/20#issuecomment-20858112 .

jackcviers avatar Jul 12 '13 04:07 jackcviers

OK, what I'm doing is using it to upload images to imgur. I ended up with: https://github.com/ForbesLindesay/imsave/blob/master/lib/post.js on the server and https://github.com/ForbesLindesay/imsave/blob/master/lib/post-browser.js on the client.

What I'm saying is I'd like to be able to have the one file look something like:

var FD = FormData || require('form-data')
var hyperquest = require('hyperquest')
var concat = require('concat-stream')

module.exports = post
function post(file, clientID, callback) {
  var fd = new FD()
  fd.append('image', file)
  var headers = fd.getHeaders()
  headers.Authorization = 'Client-ID ' + clientID
  var req = hyperquest.post('https://api.imgur.com/3/image.json', {headers: headers})
  req.on('error', callback)

  //not sure what this API call should look like
  req.attachFormData(fd)

  req.pipe(concat(function (res) { callback(null, res) }))
}

ForbesLindesay avatar Jul 12 '13 12:07 ForbesLindesay

see https://github.com/substack/http-browserify/issues/43

juliangruber avatar Feb 15 '14 11:02 juliangruber

has there been any work to support piping xhr2 files/buffers/etc into the request?

Ran into this headache recently and it breaks in Firefox.

scottcorgan avatar May 12 '14 22:05 scottcorgan

@ForbesLindesay did you ever figure out how to get hyperquest working with FormData?

lakenen avatar Jul 25 '14 03:07 lakenen

no, I'm just using browser APIs for making requests on the browser. Helps keep the bundle small since I don't need node streams on the client anyway.

ForbesLindesay avatar Jul 25 '14 14:07 ForbesLindesay