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
			| 
								 
											3 years ago
										 
									 | 
							
								"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
							 |