阿里云OSS上传文件夹下的图片遇到的坑

首先我想要的是一个脚本可以上传图片
需求是有一个文件夹,图片文件不详
结合官方API,https://help.aliyun.com/document_detail/111265.html

nodejs代码如下:

//获取项目工程里的图片
var fs = require('fs');//引用文件系统模块
var image = require("imageinfo"); //引用imageinfo模块

const OSS = require('ali-oss')
const path = require("path")

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'oss-cn-beijing',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: '--',
  accessKeySecret: '--',
  // 填写Bucket名称。
  bucket: '--',
});

async function put (filename) {
  try {
    // 填写OSS文件完整路径和本地文件的完整路径。OSS文件完整路径中不能包含Bucket名称。
    // 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    const result = await client.put(filename, path.normalize('/data/ueditor-node/example/public/img/ueditor/'+filename), {
	headers: {
                'Content-Type': 'image/jpg'
            }
	});
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

function readFileList(path, filesList) {
    var files = fs.readdirSync(path);
    files.forEach(function (itm, index) {
        var stat = fs.statSync(path + itm);
        if (stat.isDirectory()) {
        //递归读取文件
            readFileList(path + itm + "/", filesList)
        } else {

            var obj = {};//定义一个对象存放文件的路径和名字
            obj.path = path;//路径
            obj.filename = itm//名字
            filesList.push(obj);
        }

    })

}
var getFiles = {
     //获取文件夹下的所有文件
     getFileList: function (path) {
         var filesList = [];
         readFileList(path, filesList);
         return filesList;
     },
     //获取文件夹下的所有图片
     getImageFiles: function (path) {
         var imageList = [];

         this.getFileList(path).forEach((item) => {
             var ms = image(fs.readFileSync(item.path + item.filename));

             ms.mimeType && (imageList.push(item.filename))
         });
         return imageList;

     }
 };
//获取文件夹下的所有文件
getFiles.getFileList("./public/img/ueditor/").forEach((e)=>{
	put(e.filename)
});

思路就是先获取指定文件夹下的所有图片名称,然后遍历读取,之后上传,
然后问题出现了

大概跟这个问题是一样的
https://github.com/ali-sdk/ali-oss/issues/107

最后发现了 ossutil支持通过Windows、Linux和macOS系统以命令行方式管理OSS数据。

完美解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左钦杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值