You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							2.2 KiB
						
					
					
				| "use strict";
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| const fs_1 = require("fs");
 | |
| const os_1 = __importDefault(require("os"));
 | |
| const path_1 = require("path");
 | |
| const crypto_1 = __importDefault(require("crypto"));
 | |
| const mkdirp_1 = __importDefault(require("mkdirp"));
 | |
| const getFilename = (_req, _file, cb) => {
 | |
|     crypto_1.default.randomBytes(16, function (err, raw) {
 | |
|         cb(err, err ? undefined : raw.toString('hex'));
 | |
|     });
 | |
| };
 | |
| const getDestination = (_req, _file, cb) => {
 | |
|     cb(null, os_1.default.tmpdir());
 | |
| };
 | |
| class DiskStorage {
 | |
|     constructor(opts) {
 | |
|         this.getFilename = opts.filename || getFilename;
 | |
|         if (typeof opts.destination === 'string') {
 | |
|             mkdirp_1.default.sync(opts.destination);
 | |
|             this.getDestination = function (_$0, _$1, cb) {
 | |
|                 cb(null, opts.destination);
 | |
|             };
 | |
|         }
 | |
|         else {
 | |
|             this.getDestination = opts.destination || getDestination;
 | |
|         }
 | |
|     }
 | |
|     _handleFile(req, file, cb) {
 | |
|         this.getDestination(req, file, (err, destination) => {
 | |
|             if (err) {
 | |
|                 return cb(err);
 | |
|             }
 | |
|             this.getFilename(req, file, (error, filename) => {
 | |
|                 if (error) {
 | |
|                     return cb(error);
 | |
|                 }
 | |
|                 const finalPath = (0, path_1.join)(destination, filename);
 | |
|                 const outStream = (0, fs_1.createWriteStream)(finalPath);
 | |
|                 file.stream.pipe(outStream);
 | |
|                 outStream.on('error', cb);
 | |
|                 outStream.on('finish', () => {
 | |
|                     cb(null, {
 | |
|                         destination,
 | |
|                         filename,
 | |
|                         path: finalPath,
 | |
|                         size: outStream.bytesWritten,
 | |
|                     });
 | |
|                 });
 | |
|             });
 | |
|         });
 | |
|     }
 | |
|     _removeFile(_req, file, cb) {
 | |
|         const path = file.path;
 | |
|         delete file.destination;
 | |
|         delete file.filename;
 | |
|         delete file.path;
 | |
|         (0, fs_1.unlink)(path, cb);
 | |
|     }
 | |
| }
 | |
| exports.default = (opts) => new DiskStorage(opts);
 | |
| //# sourceMappingURL=disk.js.map
 |