parent
83f11ba06f
commit
e5b77f10e9
7 changed files with 205 additions and 30 deletions
@ -1,40 +1,40 @@ |
||||
const express = require('express'); |
||||
const fileUpload = require('../lib/index.js'); |
||||
const express = require("express"); |
||||
const fileUpload = require("express-fileupload"); |
||||
const app = express(); |
||||
|
||||
app.use('/form', express.static(__dirname + '/index.html')); |
||||
app.use("/form", express.static(__dirname + "/index.html")); |
||||
|
||||
// default options
|
||||
app.use(fileUpload()); |
||||
|
||||
app.get('/ping', function(req, res) { |
||||
res.send('pong'); |
||||
app.get("/ping", function(req, res) { |
||||
res.send("pong"); |
||||
}); |
||||
|
||||
app.post('/upload', function(req, res) { |
||||
app.post("/upload", function(req, res) { |
||||
let sampleFile; |
||||
let uploadPath; |
||||
|
||||
if (Object.keys(req.files).length == 0) { |
||||
res.status(400).send('No files were uploaded.'); |
||||
res.status(400).send("No files were uploaded."); |
||||
return; |
||||
} |
||||
|
||||
console.log('req.files >>>', req.files); // eslint-disable-line
|
||||
console.log("req.files >>>", req.files); // eslint-disable-line
|
||||
|
||||
sampleFile = req.files.sampleFile; |
||||
|
||||
uploadPath = __dirname + '/uploads/' + sampleFile.name; |
||||
uploadPath = __dirname + "/uploads/" + sampleFile.name; |
||||
|
||||
sampleFile.mv(uploadPath, function(err) { |
||||
if (err) { |
||||
return res.status(500).send(err); |
||||
} |
||||
|
||||
res.send('File uploaded to ' + uploadPath); |
||||
res.send("File uploaded to " + uploadPath); |
||||
}); |
||||
}); |
||||
|
||||
app.listen(8000, function() { |
||||
console.log('Express server listening on port 8000'); // eslint-disable-line
|
||||
app.listen(8002, function() { |
||||
console.log("Express server listening on port 8002"); // eslint-disable-line
|
||||
}); |
||||
|
@ -0,0 +1,29 @@ |
||||
const fs = require("fs"); |
||||
let writeStream; |
||||
let tempFilePath; |
||||
|
||||
module.exports.cleanupStream = function() { |
||||
writeStream.end(); |
||||
fs.unlink(tempFilePath, function(err) { |
||||
if (err) throw err; |
||||
}); |
||||
}; |
||||
|
||||
module.exports.tempFileHandler = function(options, fieldname, filename) { |
||||
const dir = options.tempFileDir || "/tmp/"; |
||||
tempFilePath = dir + "tmp" + Date.now(); |
||||
writeStream = fs.createWriteStream(tempFilePath); |
||||
let fileSize = 0; |
||||
|
||||
return function(data) { |
||||
writeStream.write(data); |
||||
fileSize += data.length; |
||||
if (options.debug) { |
||||
return console.log( |
||||
`Uploaded ${data.length} bytes for `, |
||||
fieldname, |
||||
filename |
||||
); |
||||
} |
||||
}; |
||||
}; |
@ -0,0 +1,99 @@ |
||||
const fs = require("fs"); |
||||
const path = require("path"); |
||||
const request = require("supertest"); |
||||
const server = require("./server"); |
||||
const clearUploadsDir = server.clearUploadsDir; |
||||
const fileDir = server.fileDir; |
||||
const uploadDir = server.uploadDir; |
||||
describe("File Upload Options Tests", function() { |
||||
afterEach(function(done) { |
||||
clearUploadsDir(); |
||||
done(); |
||||
}); |
||||
/** |
||||
* Upload the file for testing and verify the expected filename. |
||||
* @param {object} options The expressFileUpload options. |
||||
* @param {string} actualFileNameToUpload The name of the file to upload. |
||||
* @param {string} expectedFileNameOnFileSystem The name of the file after upload. |
||||
* @param {function} done The mocha continuation function. |
||||
*/ |
||||
function executeFileUploadTestWalk( |
||||
options, |
||||
actualFileNameToUpload, |
||||
expectedFileNameOnFileSystem, |
||||
done |
||||
) { |
||||
request(server.setup(options)) |
||||
.post("/upload/single") |
||||
.attach("testFile", path.join(fileDir, actualFileNameToUpload)) |
||||
.expect(200) |
||||
.end(function(err) { |
||||
if (err) { |
||||
return done(err); |
||||
} |
||||
const uploadedFilePath = path.join( |
||||
uploadDir, |
||||
expectedFileNameOnFileSystem |
||||
); |
||||
fs.stat(uploadedFilePath, done); |
||||
}); |
||||
} |
||||
describe("Testing [safeFileNames with useTempFiles] option to ensure:", function() { |
||||
it("Does nothing to your filename when disabled.", function(done) { |
||||
const fileUploadOptions = { |
||||
safeFileNames: false, |
||||
useTempFiles: true, |
||||
tempFileDir: "/tmp/" |
||||
}; |
||||
const actualFileName = "my$Invalid#fileName.png123"; |
||||
const expectedFileName = "my$Invalid#fileName.png123"; |
||||
executeFileUploadTestWalk( |
||||
fileUploadOptions, |
||||
actualFileName, |
||||
expectedFileName, |
||||
done |
||||
); |
||||
}); |
||||
it("Is disabled by default.", function(done) { |
||||
const fileUploadOptions = { useTempFiles: true, tempFileDir: "/tmp/" }; |
||||
const actualFileName = "my$Invalid#fileName.png123"; |
||||
const expectedFileName = "my$Invalid#fileName.png123"; |
||||
executeFileUploadTestWalk( |
||||
fileUploadOptions, |
||||
actualFileName, |
||||
expectedFileName, |
||||
done |
||||
); |
||||
}); |
||||
it("Strips away all non-alphanumeric characters (excluding hyphens/underscores) when enabled.", function(done) { |
||||
const fileUploadOptions = { |
||||
safeFileNames: true, |
||||
useTempFiles: true, |
||||
tempFileDir: "/tmp/" |
||||
}; |
||||
const actualFileName = "my$Invalid#fileName.png123"; |
||||
const expectedFileName = "myInvalidfileNamepng123"; |
||||
executeFileUploadTestWalk( |
||||
fileUploadOptions, |
||||
actualFileName, |
||||
expectedFileName, |
||||
done |
||||
); |
||||
}); |
||||
it('Accepts a regex for stripping (decidedly) "invalid" characters from filename.', function(done) { |
||||
const fileUploadOptions = { |
||||
safeFileNames: /[\$#]/g, |
||||
useTempFiles: true, |
||||
tempFileDir: "/tmp/" |
||||
}; |
||||
const actualFileName = "my$Invalid#fileName.png123"; |
||||
const expectedFileName = "myInvalidfileName.png123"; |
||||
executeFileUploadTestWalk( |
||||
fileUploadOptions, |
||||
actualFileName, |
||||
expectedFileName, |
||||
done |
||||
); |
||||
}); |
||||
}); |
||||
}); |
Loading…
Reference in new issue