const Koa = require("koa");
const static = require("koa-static");
const Router = require("koa-router");
const userData = require("./data/users.json");
const koaBody = require("koa-body");
const fs = require("fs");
const mysql2 = require("mysql2");
const connection = mysql2.createConnection({
host: "localhost",
user: "root",
password: "123321",
database: "js01",
charset: "utf8"
});
let app = new Koa();
let router = new Router();
app.use(koaBody({
multipart: true
}));
app.use(static(__dirname + "/static"));
router.get("/", ctx => {
ctx.body = "hello world"
});
router.post("/upload", async ctx => {
// 将传递过来的文件,读取
let fileData = fs.readFileSync(ctx.request.files.img.path);
// 将读取的文件写入到指定的目录中
fs.writeFileSync("static/imgss/" + ctx.request.files.img.name, fileData);
// 渲染页面
ctx.body = "接收成功";
});
app.use(router.routes());
app.listen(8080);
上传到服务器并渲染到页面
服务器文件
const Koa = require("koa");
const static = require("koa-static");
const Router = require("koa-router");
const userData = require("./data/users.json");
const koaBody = require("koa-body");
const fs = require("fs");
let app = new Koa();
let router = new Router();
app.use(koaBody({
multipart: true
}));
app.use(static(__dirname + "/static"));
router.get("/", ctx => {
ctx.body = "hello world"
});
router.post("/fileUpload", ctx => {
let fileData = fs.readFileSync(ctx.request.files.myfile.path);
fs.writeFileSync("static/imgss/" + ctx.request.files.myfile.name, fileData);
ctx.body = ctx.request.files.myfile.name;
})
app.use(router.routes());
app.listen(8080);
静态文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="file" class="myfile">
<button>点击上传</button>
<img src="" alt="" style="width: 100px; height: 100px;">
<script>
// ajax从点击事件外创建,防止点击一下新建一个ajax
xhr = new XMLHttpRequest();
let btn = document.querySelector("button");
btn.onclick = function(){
// 获取到上传的文件
let file = document.querySelector(".myfile").files[0];
// 实例化FormData;
let form = new FormData();
// 将上传的文件添加到form
form.append("myfile",file);
// 上传 1.上传方式 2.路径 3.是否异步
xhr.open("post","fileUpload",true);
// 接收返回值
xhr.onload = function(){
document.querySelector("img").src = `./imgss/${xhr.responseText}`
};
// 发送服务器
xhr.send(form);
}
</script>
</body>
</html>
上传到数据库并渲染到页面
服务器文件
const Koa = require("koa");
const static = require("koa-static");
const Router = require("koa-router");
const userData = require("./data/users.json");
const koaBody = require("koa-body");
const fs = require("fs");
const mysql2 = require("mysql2");
const connection = mysql2.createConnection({
host: "localhost",
user: "root",
password: "123321",
database: "js01",
charset: "utf8"
});
let app = new Koa();
let router = new Router();
app.use(koaBody({
multipart: true
}));
app.use(static(__dirname + "/static"));
router.get("/", ctx => {
ctx.body = "hello world"
});
router.post("/upload", async ctx => {
// 将传递过来的文件,读取
let fileData = fs.readFileSync(ctx.request.files.img.path);
let imgUrl = "/imgss/" + ctx.request.files.img.name;
console.log(imgUrl)
let sql = "INSERT INTO imgdata (imgUrl) VALUES(?)"
await connection.promise().query(sql, [imgUrl]);
// 将读取的文件写入到指定的目录中
fs.writeFileSync("static/imgss/" + ctx.request.files.img.name, fileData);
// 将文件传入到数据库
ctx.body = "接收成功";
});
router.get("/new", async ctx => {
let mysql = "SELECT * FROM imgData";
let [rows] = await connection.promise().query(mysql);
let data = rows;
ctx.body = {
info: data
}
})
app.use(router.routes());
app.listen(8080);
上传文件页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="file" class="myfile">
<button>点我上传</button>
<script>
document.querySelector("button").onclick = function(){
// 获取到上传的文件
let file = document.querySelector(".myfile").files[0];
// console.log(files);
// 创建FormData对象
let form = new FormData();
// 添加你想上传的内容
form.append("img",file); //将需要上传的文件信息,添加到form
form.append("name","张三");
/*
使用form的好处
1. 不需要设置文件头
2. 可以把你的数据可以以键值对的方式存起来
3. 可以添加描述,可以是字符串或者对象
*/
let xhr = new XMLHttpRequest();
// get 无法上传文件,因为他上传都是在头部位置
// 而文件需要通过正文的方式
xhr.open("post","/upload",true);
xhr.onload = function(){
console.log(xhr.responseText);
};
xhr.send(form);
}
</script>
</body>
</html>
查看文件页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
# 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/be23d97f0167d2eecffd2d898befc0da.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/105cfc3632c76db14e5ee9c256a0c8ed.png)
![](https://img-blog.csdnimg.cn/img_convert/1ecbecc18b71597a27f74d8a42147ced.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618191877)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中...(img-kd4CL409-1715878248911)]
[外链图片转存中...(img-uJQPnW5P-1715878248912)]
[外链图片转存中...(img-ELsyWo1V-1715878248912)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618191877)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**