Skip to content Skip to sidebar Skip to footer

Receiving "uploading File Too Fast!" Error From Imgur Api

I created a node.js server that uses busboy to take requests, and pipe the files to Imgur for upload. However, I keep getting an 'Uploading file too fast!' response from Imgur, and

Solution 1:

The first issue is that you should be using formData instead of form for file uploads. Otherwise, the request library won't send the correct HTTP request.

The second issue is that the stream object won't have the correct content length until it's fully processed. We can buffer the data ourselves and pass it after the initial file stream from busboy has processed.*

This gives us something that looks like

var express = require('express');
varBusboy = require('busboy');
var fs = require('fs');
var request = require('request-promise');
var router = express.Router();

router.post('/u', function(req, res, next) {
    var busboy = newBusboy({headers: req.headers});
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
        if(fieldname == 'image') {
            // the buffer
            file.fileRead = [];
            file.on('data', function(data) {
                // add to the buffer as data comes inthis.fileRead.push(data);
            });

            file.on('end', function() {
                // create a new stream with our buffered datavar finalBuffer = Buffer.concat(this.fileRead);

                var options = {
                    uri: 'https://api.imgur.com/3/image',
                    method: 'POST',
                    headers: {
                        'Authorization': 'Client-ID ' + clientID // put client id here
                    },

                    formData: {
                        image: finalBuffer,
                        type: 'file'
                    }
                };

                request(options)
                    .then(function(parsedBody) {
                        console.log(parsedBody);
                    })
                    .catch(function(err) {
                        console.log(err);
                    });
            });
        }
    });
    busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated) {
        console.log('field');
    });
    busboy.on('finish', function() {
        res.status(200).end();
    });
    req.pipe(busboy);
});

Lastly, you may want to consider using the request library, as the request-promise library discourages the use of streams. See the github repo for more details: https://github.com/request/request-promise

Post a Comment for "Receiving "uploading File Too Fast!" Error From Imgur Api"