在如今互聯網時代,大家對于網盤的需求已經越來越高,而JavaScript是實現網盤文件上傳、下載、刪除等操作不可或缺的語言。因此,今天我就來介紹關于如何使用JavaScript從入門到精通完成網盤的搭建和開發。
首先,為了能夠完成網盤的操作,我們需要考慮到前后端的配合以及數據庫存儲的問題。簡單地說,前端通過JavaScript來實現網頁上的操作,后端通過Node.js來搭建服務器與數據庫進行交互。這里,我們使用Mongoose作為MongoDB數據庫交互的中間件,以及Express作為服務器框架。
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
const dbUrl = 'mongodb://localhost:27017/your-db-name';
mongoose.Promise = global.Promise;
mongoose.connect(dbUrl, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => console.log('Database connected...'))
.catch(err => console.log(err));
app.listen(port, () => console.log(Server running on port ${port}
));
接下來,先從上傳文件的功能開始介紹。在前端頁面中,我們使用HTML5提供的<input type="file">標簽來進行文件的選擇。當然,這里還需要考慮瀏覽器兼容的問題,例如IE瀏覽器不支持FormData等API。因此,我們需要通過JavaScript的判斷使用XMLHttpRequest傳入文件數據,或是使用fetchAPI發送formData,以完成文件上傳。具體示例代碼如下:
// HTML
<form id="upload-form">
<input type="file" name="file-input" id="file-input" />
<button id="submit-btn">上傳</button>
</form>
// JS
const form = document.getElementById('upload-form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const formData = new FormData(form);
formData.append('file', file);
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log('Upload success.');
}
};
xhr.send(formData);
});
// 或者使用fetch
const form = document.getElementById('upload-form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const formData = new FormData(form);
formData.append('file', file);
fetch('/upload', {
method: 'POST',
body: formData
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.log(err));
});
在處理完上傳文件的功能后,我們還需要考慮顯示文件列表、下載文件、刪除文件等操作。這里,我們可以使用Mongoose提供的API實現對數據庫的增刪查改操作,同時也要根據路由設計來進行前后端的數據交互。示例代碼如下:
const mongoose = require('mongoose');
const fileSchema = mongoose.Schema({
originalName: String,
fileName: String,
size: Number,
type: String
});
const File = mongoose.model('File', fileSchema);
// 向數據庫添加文件信息
app.post('/upload', (req, res) => {
const { originalName, fileName, size, type } = req.body;
const file = new File({
originalName,
fileName,
size,
type
});
file.save()
.then(() => {
res.status(200).send('Save success.');
})
.catch(err => {
console.log(err);
res.status(400).send('Save failed.');
});
});
// 從數據庫獲取文件列表
app.get('/files', (req, res) => {
File.find()
.then(files => {
res.status(200).send(files);
})
.catch(err => {
console.log(err);
res.status(400).send('Get files failed.');
});
});
// 下載文件
app.get('/file/:fileName', (req, res) => {
const fileName = req.params.fileName;
File.findOne({
fileName
})
.then(file => {
const fileStream = fs.createReadStream(file.fileName);
res.setHeader('Content-disposition',attachment; filename=${file.originalName}
);
res.setHeader('Content-type', file.type);
fileStream.pipe(res);
})
.catch(err => {
console.log(err);
res.status(400).send(Download failed. ${err}
);
});
});
// 刪除文件
app.delete('/file/:fileName', (req, res) => {
const fileName = req.params.fileName;
File.deleteOne({
fileName
})
.then(() => {
fs.unlink(fileName, err => {
if (err) {
console.log(err);
}
});
res.status(200).send(Delete ${fileName} success.
);
})
.catch(err => {
console.log(err);
res.status(400).send(Delete ${fileName} failed.
);
});
});
總結一下,在使用JavaScript開發網盤時,首先需要搭建好Node.js服務器和MongoDB數據庫,并使用Mongoose進行數據庫操作。而在前端頁面中,我們使用HTML5提供的標簽和JavaScript來實現網盤文件的上傳、下載、刪除等功能。具體示例代碼中,我們結合了XMLHttpRequest和fetchAPI進行了文件上傳操作,同時利用Mongoose的API來實現對數據庫的增刪查改操作。希望大家通過本文,能夠更好地理解和掌握JavaScript開發網盤的方法。