jquery结合node js实现图片上传以及图片文件的回显操作

jquery原生实现文件的上传、图片回显、以及后台(node)实现文件的接收存储  

发送请求方式为axios 请求方式为post 

前端使用form表单 与input type=‘file’ 设置form表单enctype属性值为  ‘multipart/form-data’ 

代码

<div id="backimg"></div>

<div class="update-music flexbox">

<form

action=""

enctype="multipart/form-data"

id="upload-file-form"

>

<span class="add-icon">上传</span>

<input type="file" id="upoload-file-content" />

</form>

</div>

引入axios  script文件 (用于发送请求 附上axios 官方文档链接  使用说明 · Axios 中文说明 · 看云

引入js文件 (推荐在html内容结尾引入 不阻塞html页面加载)

这里使用axios发送请求 所以必须在引入template.js之前引入axios文件

formData方法简介   FormData 对象的使用 - Web API 接口参考 | MDN

FileReader方法简介 FileReader - Web API 接口参考 | MDN

代码

// 封装请求基地址

let saveBaseUrl = 'http://localhost:8090';

// input change事件

$('#upoload-file-content').on('change', function(e) {

let file = $(this)[0].files;

console.log(file);

// 使用formData数据格式发送文件

let formData = new FormData();

formData.append('file', file[0]);

// console.log(formData); //这里直接打印formData数据为空 其实相关数据已经加载 需打印formData的原型来查看数据

// console.log(formData.get('file'));

// 数据拼接完成后 发送请求给后台 //这里自己封装了axios请求的基地址 axios官方有相关请求基地址封装方式 具体方法请查看文档

axios

.post(saveBaseUrl + '/filesUpdate', formData)

.then(res => {

console.log(res);

if (res.errcode === 0) {

// 如果上传并且保存成功就显示上传的文件 这里没有采取回显服务器回显的地址而是用户本机的图片文件 采用FileReader函数读取文件

var fr = new FileReader(),

// 创建div容纳图片

div = document.createElement('div'),

// 创建img标签显示文件

img = document.createElement('img');

div.className = 'pic';

fr.onload = function(e) {

img.src = this.result;

div.appendChild(img);

$('#backimg').append(div);

};

fr.readAsDataURL(file[0]); //读取文件

}else {

console.log('图片上传保存失败');

}

})

.catch(err => {

console.log(err);

});

});

后台接收请求-使用了express、body-parser、connect-multiparty(解析文件)以及sql数据库操作方法 此处未写入数据库(请注意处理跨域等相关问题)

node代码

const db = require('./db');

const fs = require('fs');

const path = require('path');

// 存储文件

exports.filesUpdate = (req, res) => {

console.log(req.files.file);

let file = req.files.file;

// 拼接文件名称以及存储路径

var des_file =

path.join(__dirname, '../satatic') + '/' + file.originalFilename;

console.log(des_file);

// 存储文件

fs.readFile(file.path, function(err, data) {

fs.writeFile(des_file, data, function(err) {

let response = {};

if (err) {

console.log(err);

} else {

response = {

errcode: 0,

message: '文件上传成功',

// 返回路径 线上项目的路径与此路径也许不一样 具体路径请自行处理

url: des_file

};

}

console.log(response);

res.end(JSON.stringify(response));

});

});

};

我这里采用了分模块写法 将部分代码分割 这样页面逻辑自认为会清晰点 上面node代码为业务部分 路由部分与业务部分分开 

下面部分为路由部分

const express = require('express');

const router = express.Router();

const multipart = require('connect-multiparty');

let multipartMiddleware = multipart();

const serve = require('./serve');

// 存储首页数据

router.post('/saveData', serve.saveData);

// 文件上传

router.post('/filesUpdate', multipartMiddleware, serve.filesUpdate);

module.exports = router;

如有错误请各位大牛多多指正交流 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值