前端上传用element组件
<el-upload
class="upload-demo"
drag
:limit="1"
accept="pdf"
:data={name:this.username}
name="file"
action="http://localhost:3030/api/candidate/userinfojl"
multiple>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<!-- <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div> -->
</el-upload>
//:data可以传除了文件之外的其他参数
action写请求地址
上传的后端nodejs
infoEditjl (name,data) {
name = escape(name)
const sql = `UPDATE candidate SET 简历 = '${data}', isapprove = false
WHERE username = '${name}'`
console.log("简历",name,data)
return exec(sql)
},
//此函数是操作数据库的方法,把文件名(随机生成的不重复名)存放到数据库中
app.post('/api/candidate/userinfojl', async(req, res) => {
let form = new formidable.IncomingForm()
form.parse(req,async (err, files, file) => {
let name = files.name;
let read = fs.createReadStream(file.file.filepath)
let file_name = file.file.newFilename+"." +file.file.originalFilename.split(".")[file.file.originalFilename.split(".").length-1]
let write = fs.createWriteStream('./upload/' + file_name )//写入本地
read.pipe(write);
console.log(name,file_name);
await candidate.infoEditjl(name,file_name)
res.send({ok: true, data: req.body})
})
})
//接口用到了两个插件
const { md5Code } = require('v5w-utils') //随机生成字符码作为存到文件夹的名,唯一
const formidable = require('formidable') //接收前端传递过来的二进制文件,三个参数,err错误,files传递过来的非文件参数,flie传过来的文件
获取文件后对文件进行读取,判断其文件类型(pdf,png)等,并将文件写入本地目录或服务器目录
传递回参数给操作函数
下载对应刚刚的数据库
<el-table-column label="操作">
<template slot-scope="scope">
<el-button
size="mini"
@click="handleEditjl(scope.$index, scope.row)"><a :href="jlname" target="_blank">下载简历</a></el-button>
</template>
</el-table-column>
js
async handleEditjl(index, row) {
console.log("啊啊是",index, row.username);
let username = row.username;
this.jlname = `http://localhost:3030/api/job/resume?username=${username}`;
await this.$axios.get(`/api/job/resume?username=${username}`)
},
//直接请求接口不显示下载res.download,用动态a链接地址,html不能拼接,写成动态放data里传参数里
后端
app.get('/api/job/resume', async(req, res) => {
// const result =await candidate.userrename()
const name =await candidate.userrename(req.query.username)
console.log("pp",name)
if(name==''){
res.send({data:"该生未提交简历,详情可电话联系"})
}
else{
res.download('./upload/'+name)
}
})
//接口,方法传递差到的文件名后传给接口,用res.download方法下载
数据库查询方法,
async userrename(username){
username = escape(username)
const sql = `select 简历 from candidate
WHERE username = '${username}'`
const row = await exec(sql)
let mz = row.map((item,index,arr)=>{
return item.简历
})
// let dd = fs.readFileSync('./upload/ee.pdf')
let a = mz.toString()
return a
}