要实现vue form表单post请求结合Servlet实现文件上传功能,需要经历以下几个步骤:
- 在前端使用vue构建表单,确保表单中包含文件上传控件
<template>
<form enctype="multipart/form-data" method="post" action="">
<input type="file" name="file" />
<button @click="upload">上传</button>
</form>
</template>
- 在vue实例中定义上传方法,使用axios向服务器发送post请求
import axios from 'axios'
export default {
methods: {
async upload() {
const formData = new FormData()
const file = this.$el.querySelector('input[name="file"]').files[0]
formData.append('file', file)
try {
const res = await axios.post('/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' }
})
console.log(res.data)
} catch (err) {
console.log(err.response.data)
}
}
}
}
- 在Servlet中处理上传的文件
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file")
String fileName = filePart.getSubmittedFileName()
// 文件保存路径为 /path/to/app/file.txt
filePart.write("/path/to/app/" + fileName)
response.getWriter().write("上传成功")
}
}
- 配置Tomcat服务器,将Servlet部署到Tomcat上
在Tomcat的webapps目录下创建一个名为myapp的文件夹,把编译后的代码打成war包,放到这个文件夹下。在Tomcat的conf目录下的server.xml文件中添加一个Context节点:
<Context docBase="/path/to/tomcat/webapps/myapp.war" path="/myapp" />
第一个示例:Vue + Spring Boot实现文件上传
前端代码不变,后端使用Spring Boot框架实现文件上传的处理功能:
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
File dest = new File("/path/to/app/" + filename);
file.transferTo(dest);
return "上传成功";
}
}
第二个示例:Vue + Express实现文件上传
前端代码不变,后端使用Express框架实现文件上传的处理功能:
const express = require('express')
const multer = require('multer')
const upload = multer({ dest: '/path/to/app/' })
const app = express()
app.post('/upload', upload.single('file'), (req, res) => {
res.send('上传成功')
})
app.listen(3000, () => {
console.log('Server is running on port 3000')
})
这两个示例展示了使用不同的后端框架实现文件上传的处理功能,但是前端代码都是一样的。这也说明了前后端分离的好处,前端开发人员只需要关注如何构建表单并发送post请求,不需要知道后端如何处理文件上传。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue form表单post请求结合Servlet实现文件上传功能 - Python技术站