Skip to content

Support FormData #20

Open
Open

Description

@ForbesLindesay

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)

Activity

  1. jackcviers commented on Jul 12, 2013

    @jackcviers

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

  2. ForbesLindesay commented on Jul 12, 2013

    @ForbesLindesay
    ContributorAuthor

    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.

  3. jackcviers commented on Jul 12, 2013

    @jackcviers

    @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" notifications@github.com
    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
    .

  4. ForbesLindesay commented on Jul 12, 2013

    @ForbesLindesay
    ContributorAuthor

    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) }))
    }
  5. juliangruber commented on Feb 15, 2014

    @juliangruber
    Member

    see #43

  6. scottcorgan commented on May 12, 2014

    @scottcorgan

    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.

  7. lakenen commented on Jul 25, 2014

    @lakenen
    Contributor

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

  8. ForbesLindesay commented on Jul 25, 2014

    @ForbesLindesay
    ContributorAuthor

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions