Esempio n. 1
0
  request(file.download_url).on('response', function(res) {
    // Extract the name of the file
    var disposition = contentDisposition.parse(res.headers['content-disposition']);
    var filename = disposition.parameters.filename;
    var path = os.tmpdir() + filename;

    // Function that will clean up the temporary file
    var cleanTempFile = function(err) {
      fs.unlink(path, function() {
        return callback(err);
      });
    };

    res.pipe(fs.createWriteStream(path))
    .on('error', cleanTempFile)
    .on('finish', function() {

      // Create the file asset
      var categories = getMappedCategories(file.categories);
      AssetsAPI.createFile(toCtx, file.title, {
        'mimetype': file.mime,
        'file': path,
        'filename': file.title
      }, {
        'categories': categories,
        'description': file.description || undefined,
        'thumbnail_url': file.thumbnail_url || undefined,
        'image_url': file.image_url || undefined,
        'embed_id': file.embed_id || undefined,
        'embed_key': file.embed_key || undefined,
        'embed_code': file.embed_code || undefined
      }, cleanTempFile);
    });
  });
Esempio n. 2
0
 extractDataFromResponse() {
   const headers = omit(this.response.headers, 'set-cookie', 'connection')
   this.statusCode = this.response.statusCode
   this.headers = headers
   if (headers['content-disposition']) {
     this.contentDisposition = parseContentDisposition(headers['content-disposition'])
   }
   return this
 }
Esempio n. 3
0
const getFileNameFromResponse = (res) => {
  let header = res.headers['content-disposition'];
  if (!header) {
    let err = new Error('Response have no "content-disposition" in header');
    logger.error(err.message);
    dispatch('subs:download:error', { err });
    return;
  }

  return contentDisposition.parse(header).parameters.filename;
};
function parseContentDisposition(text, next) {
    if (!text) return next(new Error('Content disposition header is required'))

    var result
    try {
        result = contentDisposition.parse(text)
    } catch (err) {
        return next(new Error(format('Error parsing content disposition: %s. Original error was: %s', text, err.message)))
    }
    next(null, _.defaults({ type: result.type }, result.parameters))
}
Esempio n. 5
0
      request(asset.download_url).on('response', function(res) {
        // Extract the name of the file
        var disposition = contentDisposition.parse(res.headers['content-disposition']);
        var filename = disposition.parameters.filename;
        var filePath = path.join(downloadDir, filename);

        downloadFileAndCreateAsset(toCtx, res, filePath, asset, categories, function(err) {
          // Clean up
          fs.unlink(filePath, function() {
            return callback(err);
          });
        });
      });
Esempio n. 6
0
      .on('response', function (response) {
        if (response.statusCode >= 400) {
          errorCallback({ownCode: 'HTTPERROR'});
        }

        if (['application/x-bittorrent', 'application/octet-stream', 'application/force-download']
            .indexOf(response.headers['content-type']) > -1) {

          var timeStamp = getCurrentTimeStamp();
          var matches;
          var fileNameFromUrl;

          if (matches = urlParsed.path.match(/[^\/]+.torrent$/)) {
            fileNameFromUrl = matches[0];
          } else {
            try {
              var responseContentDispositions = contentDisposition.parse(response.headers['content-disposition']);

              if (responseContentDispositions.type == 'attachment' &&
                responseContentDispositions.parameters &&
                responseContentDispositions.parameters.filename) {
                fileNameFromUrl = responseContentDispositions.parameters.filename;
              } else {
                throw new Error('Content Disposition in incorrect');
              }
            } catch (e) {
              fileNameFromUrl = 'saved_via_link.torrent';
            }
          }

          var fileName = [timeStamp, fileNameFromUrl].join('_');

          var torrentWriteStream = fs
            .createWriteStream(pathToSave + '/' + fileName)
            .on('error', function (error) {
              error.ownCode = 'FSERROR';
              errorCallback(error)
            })
            .on('close', function () {
              successCallback(fileName);
            });

          torrentHttpRequest.pipe(torrentWriteStream);
        }
        else {
          errorCallback({ownCode: 'CONTENTTYPEERROR'});
        }
      });
 download(urlString, function(err, resp) {
   if (err) return cb(err);
   var contentDisposition = resp.headers['content-disposition'];
   if (contentDisposition) {
     var filename;
     try {
       filename = parseContentDisposition(contentDisposition).parameters.filename;
     } catch (err) {
       // do nothing
     }
     if (filename) {
       decodedFilename = filename;
     }
   }
   var contentLength = parseInt(resp.headers['content-length'], 10);
   cb(null, resp, decodedFilename, contentLength);
 });
Esempio n. 8
0
Helpers.getContentDisposition = function (request, bucket, key, options = {}) {

  const { getMode } = request.route.settings.plugins.s3;
  const mode = getMode(request);

  if (!mode) {
    return Promise.resolve();
  }

  let filename;
  let type;

  if (options.ContentDisposition) {
    const disposition = ContentDisposition.parse(options.ContentDisposition);
    const dispositionType = Hoek.reach(disposition, 'type');
    if (dispositionType === 'inline' || dispositionType === 'attachment') {
      type = dispositionType;
    }

    filename = Hoek.reach(disposition, 'parameters.filename');
  }

  if (mode === 'auto' && !type) {
    // if mode is `auto` but no `type` found, default to 'attachment'
    type = 'attachment';
  }

  if (mode !== 'auto') {
    type = mode;
  }

  return Promise.resolve()
    .then(() => internals.getFilename(request, bucket, key, { filename }))
    .then((fname) => {
      if (!fname) {
        return null;
      }

      return ContentDisposition(fname, { type });
    });
};