mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-06-23 17:29:19 +02:00
Remove dependency express-fileupload
This commit is contained in:
parent
1dbfb5637a
commit
7aa7e662b2
20 changed files with 2782 additions and 23 deletions
64
server/libs/expressFileupload/tempFileHandler.js
Normal file
64
server/libs/expressFileupload/tempFileHandler.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const crypto = require('crypto');
|
||||
const {
|
||||
debugLog,
|
||||
checkAndMakeDir,
|
||||
getTempFilename,
|
||||
deleteFile
|
||||
} = require('./utilities');
|
||||
|
||||
module.exports = (options, fieldname, filename) => {
|
||||
const dir = path.normalize(options.tempFileDir);
|
||||
const tempFilePath = path.join(dir, getTempFilename());
|
||||
checkAndMakeDir({ createParentPath: true }, tempFilePath);
|
||||
|
||||
debugLog(options, `Temporary file path is ${tempFilePath}`);
|
||||
|
||||
const hash = crypto.createHash('md5');
|
||||
let fileSize = 0;
|
||||
let completed = false;
|
||||
|
||||
debugLog(options, `Opening write stream for ${fieldname}->${filename}...`);
|
||||
const writeStream = fs.createWriteStream(tempFilePath);
|
||||
const writePromise = new Promise((resolve, reject) => {
|
||||
writeStream.on('finish', () => resolve());
|
||||
writeStream.on('error', (err) => {
|
||||
debugLog(options, `Error write temp file: ${err}`);
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
dataHandler: (data) => {
|
||||
if (completed === true) {
|
||||
debugLog(options, `Error: got ${fieldname}->${filename} data chunk for completed upload!`);
|
||||
return;
|
||||
}
|
||||
writeStream.write(data);
|
||||
hash.update(data);
|
||||
fileSize += data.length;
|
||||
debugLog(options, `Uploading ${fieldname}->${filename}, bytes:${fileSize}...`);
|
||||
},
|
||||
getFilePath: () => tempFilePath,
|
||||
getFileSize: () => fileSize,
|
||||
getHash: () => hash.digest('hex'),
|
||||
complete: () => {
|
||||
completed = true;
|
||||
debugLog(options, `Upload ${fieldname}->${filename} completed, bytes:${fileSize}.`);
|
||||
if (writeStream !== false) writeStream.end();
|
||||
// Return empty buff since data was uploaded into a temp file.
|
||||
return Buffer.concat([]);
|
||||
},
|
||||
cleanup: () => {
|
||||
completed = true;
|
||||
debugLog(options, `Cleaning up temporary file ${tempFilePath}...`);
|
||||
writeStream.end();
|
||||
deleteFile(tempFilePath, err => (err
|
||||
? debugLog(options, `Cleaning up temporary file ${tempFilePath} failed: ${err}`)
|
||||
: debugLog(options, `Cleaning up temporary file ${tempFilePath} done.`)
|
||||
));
|
||||
},
|
||||
getWritePromise: () => writePromise
|
||||
};
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue