Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support FormData #20

Open
ForbesLindesay opened this issue Jul 12, 2013 · 8 comments
Open

Support FormData #20

ForbesLindesay opened this issue Jul 12, 2013 · 8 comments

Comments

@ForbesLindesay
Copy link
Contributor

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 browserify/browserify#439)

@jackcviers
Copy link

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

@ForbesLindesay
Copy link
Contributor Author

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.

@jackcviers
Copy link

@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//issues/20#issuecomment-20858112
.

@ForbesLindesay
Copy link
Contributor Author

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) }))
}

@juliangruber
Copy link
Member

see #43

@scottcorgan
Copy link

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.

@lakenen
Copy link
Contributor

lakenen commented Jul 25, 2014

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

@ForbesLindesay
Copy link
Contributor Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants