upload上传和下载文件

前端上传用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
	   
	   }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现文件上传后的下载和预览功能,你可以使用以下方法: 1. 文件下载:在服务器端,将上传文件保存到指定的位置,并为该文件生成一个唯一的下载链接。然后,在前端页面上提供一个下载按钮或链接,当用户点击时,使用该链接进行文件下载。 2. 文件预览:对于常见的文档类型(如PDF、Word、Excel等),可以使用相应的插件或库来实现文件预览功能。你可以在前端页面上添加一个预览按钮或链接,当用户点击时,通过插件或库加载并显示文件内容。 以下是一个示例代码,使用 Vue.js 和 Element UI 中的 el-upload 组件来实现文件上传下载和预览功能: ```html <template> <div> <el-upload class="upload-demo" action="/api/upload" :on-success="handleUploadSuccess" :file-list="fileList" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-button slot="tip" size="small" type="success">上传到服务器</el-button> </el-upload> <el-button v-if="fileList.length > 0" size="small" type="primary" @click="downloadFile">下载文件</el-button> <el-button v-if="fileList.length > 0" size="small" type="info" @click="previewFile">预览文件</el-button> </div> </template> <script> export default { data() { return { fileList: [], downloadUrl: '' }; }, methods: { handleUploadSuccess(response, file, fileList) { // 上传成功后,保存服务器返回的下载链接 this.downloadUrl = response.downloadUrl; this.fileList = fileList; }, downloadFile() { // 使用保存的下载链接进行文件下载 window.location.href = this.downloadUrl; }, previewFile() { // 在新标签页中打开文件预览链接 window.open(this.downloadUrl); } } }; </script> ``` 在上面的例子中,el-upload 组件通过 action 属性指定了文件上传的接口地址。在服务器端的上传接口中,你需要将文件保存到指定位置,并将下载链接返回给前端前端通过 handleUploadSuccess 方法获取服务器返回的下载链接,并保存在 downloadUrl 变量中。当用户点击下载按钮时,调用 downloadFile 方法,使用保存的下载链接进行文件下载。当用户点击预览按钮时,调用 previewFile 方法,在新的标签页中打开文件预览链接。 请注意,上传文件和保存到服务器的逻辑需要根据你的具体需求进行实现。此示例仅提供了一个基本的框架,你可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值