当前位置:Gxlcms > JavaScript > nodejs利用ajax实现网页无刷新上传图片实例代码

nodejs利用ajax实现网页无刷新上传图片实例代码

时间:2021-07-01 10:21:17 帮助过:4人阅读

通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转。

利用ajax技术和FormData()对象可以有效的解决这个问题

废话不多说 直接上关键代码:

html部分

  1. <div class="form-group">
  2. <label>File input</label>
  3. <input type="file" name="file" id="file">
  4. <p id="result"></p>
  5. <img id="img" src="">
  6. </div>
  7. <button id="upload" class="btn btn-default">提交</button>

这里注意input标签的 type="file"

js部分:

  1. function uploadFile(){
  2. var file = document.getElementById("file")
  3. var formData = new FormData();
  4. formData.append('file',file.files[0]);
  5. $.ajax({
  6. url: '/upload',
  7. type: 'POST',
  8. data: formData,
  9. // async: false,
  10. cache: false,
  11. contentType: false,
  12. processData: false,
  13. success: function(data){
  14. if(200 === data.code) {
  15. $('#result').html("上传成功!");
  16. $('#img').attr('src',data.data);
  17. } else {
  18. $('#result').html("上传失败!");
  19. }
  20. console.log('imgUploader upload success');
  21. },
  22. error: function(){
  23. $("#result").html("与服务器通信发生错误");
  24. }
  25. });
  26. }
  27. function postPage() {
  28. var uploada = document.getElementById('upload');
  29. uploada.addEventListener("click",function () {
  30. uploadFile();
  31. },false);
  32. }
  33. window.onload = function () {
  34. postPage();
  35. }

nodejs部分:

  1. var storage = multer.diskStorage({
  2. destination: function (req, file, cb){
  3. cb(null, './public/images')
  4. },
  5. filename: function (req, file, cb){
  6. cb(null, file.originalname)
  7. }
  8. });
  9. var upload = multer({
  10. storage: storage
  11. });
  12. router.post('/upload', upload.single('file'), function (req, res, next) {
  13. var url = 'http://' + req.headers.host + '/images/' + req.file.originalname
  14. res.json({
  15. code : 200,
  16. data : url
  17. })
  18. });

multer是express官方推荐的文件上传中间件。

文件上传有以下方法

  1. upload.single(‘file'), //适用于单文件上传。
  2. upload.array(‘file',num), //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num。

同时还提供了混合上传,比如A类文件1个,B类文件2个。官方API有详细说明。

file为上传字段名称,当使用form表单submit方式上传时,必须与表单上传的name属性保持一致。

对上传文件大小限制,名称限制等均可在limits中加上,具体可加属性,请参考官方api。

multer官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行