上传图片(文件)的写法

前端表单

<form action="http://localhost:8080/" method="POST" enctype="multipart/form-data">
        文件:<input type="file" name="f1"> <br>
        <input type="submit" value="上传">
    </form>

首先 类型一定得是POST类型
enctype=“multipart/form-data” 表示所上传的是文件本身 ,而不是文件名,可以尝试如果不加这句的话上传的将不是文件本身
然后要引入的是一个multer 模块,npm中下载之后引进来

var objMulter = multer({dest:'./www/update'});

使用的时候需要定义对象来操作 dest则是文件传过来存放的目录

server.use(objMulter.any());

这里代表接受前台传过来的任意类型的数据
理论上来讲 现在已经可以接受到所传过来的信息了,我们尝试传一张照片看结果
的确拿到了文件
在这里插入图片描述
但是打开之后这样显示
在这里插入图片描述
这显然不是想要的结果。问题出在了上传后的文件名和路径
先下载fs path模块并引入进来

server.use('/',function(req,res){
    var str = req.files[0].originalname;//原始名(上传之前)
    var name = req.files[0].path;//上传之后的文件名变成了一个随机的没有扩展名的数据
});

上面代码着重看一下str 和 name 如果在分别打印他们,我们就会发现二者分别是
上传的图片的名字和一串随机的数据,随机数据前面正好是刚才确定的路径(dest)
再加上刚才那个未知的文件出现的位置 我们大概可以确定,name就是上传后的文件
名,而打不开的原因则是它缺少了文件的后缀(扩展名)。思路是从str里面拿
所以现在要做的就是获取str的扩展名,然后拼接在name里面

var ext = path.parse(str).ext;

path.parse的解析结果为(以我的图片解析结果为例)

{ root: ‘’,
dir: ‘’,
base: ‘desk.jpeg’,
ext: ‘.jpeg’,
name: ‘desk’ }

的一个对象, ext属性就是扩展名了
接下来要修改文件名

fs.rename(name A,nameB)//将文件名从B改成A

具体操作:

fs.rename(name,name+ext,function(err){
        if(err){
            console.log(err);
            res.send('上传失败');
        }else{
            res.send('上传成功');
        }
    });

完整代码为:

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
var path = require('path');
var fs = require('fs');
var server = express();
var objMulter = multer({dest:'./www/update'});//在使用multer的时候 要先建立一个对象  传参dest是上传路径
server.listen(8080);
// server.use(bodyParser.urlencoded({extended:false})); 如果是解析post数据,就这样写
server.use(objMulter.any());//表示接受任何上传的文件
server.use('/',function(req,res){
    var str = req.files[0].originalname;//原始名(上传之前)
    var ext = path.parse(str).ext;//通过path.parse解析,最后拿到扩展名
    var name = req.files[0].path;//上传之后的文件名变成了一个随机的没有扩展名的数据
    fs.rename(name,name+ext,function(err){//在这串数据后面加上扩展名就可以了
        if(err){
            console.log(err);
            res.send('上传失败');
        }else{
            res.send('上传成功');
        }
    });
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值