图片URL转file文件(前端+后端node.js)

简介: 图片URL转file文件(前端+后端node.js)

需求:
主要是想自动化的根据图片url上传一张全新的图片到我们的服务器

正常手动操作,就是需要把这个图片根据url 下载下来

然后去手动的上传 然后上传成功。

但是如果让脚本去执行这个操作呢?

前端
第一步:

先把图片的url转为blob文件

关键代码: let imgFile = new File([blob], imageName, { type: "image/jpeg" });

// 选择默认图片
function chooseStaticImg(imageUrl) {
  getImageFileFromUrl(imageUrl, "图片.png", function (file) {
    // file = file; //获取file对象
    console.log(file);
  });
}
// 根据路径返回file
function getImageFileFromUrl(url, imageName, callback) {
  fetch(url)
    .then((res) => {
      return res.blob();
    })
    .then((blob) => {
      let imgFile = new File([blob], imageName, { type: "image/jpeg" });
      callback(imgFile);
    });
}
chooseStaticImg("http://biaoblog.run:3000/uploads/1615366772320.png");

复制代码
如果请求文件用的axios可以这样:效果相同

 axios.get(url).then((res) => {
    let imgFile = new File([res.data], imageName, { type: "image/jpeg" });
    callback(imgFile);
  });

复制代码
第二步:

把已经转成功的文件 上传到我们的服务器就完事了

// 上传到我们自己的服务器
function uploadFile(file) {
  var formData = new FormData();
  formData.append("file", file);
  console.log(formData.get("file"));
  fetch("http://localhost:3000/blogData/upload", {
    method: "POST",
    body: formData,
  // headers: {
    // //不需要写'Content-Type': 'multipart/form-data',自动是form -data 写了报错!离谱!
    // 'Content-Type': 'multipart/form-data',
    // },
  })
    .then((res) => {
      return res.json();
    })
    .then((res) => {
      console.log(res);
    });
}

复制代码

后端使用node.js
经过操作,发现上面说的第一种方法 依赖于new File 也就是前端的方法

但是在node环境中 没有这样直接生成file的方法怎么办呢?

答案是通过fs.readfile

首先放弃一种用户传递file这种方式 单独写个接口来处理

下面是方法.

主要是通过axios去请求这个图片的url,可以指定返回的数据格式为:arraybuffer

然后writeFile是直接buffer的 ,直接指定路径写入就可以了,实现了我们的需求,不需要依赖于前端的file对象了

封装了一层promise来处理异步,compressImg方法是我们压缩图片的方法 如果需要可以参考:http://biaoblog.cn/info?id=1661684128265

不需要可以忽略,

当时还是很纠结node该如何转成前端那种file再去调用我们之前的upload方法,后来想通了

不一样非要用一样的方法,只要能达到我们的效果即可!

我们遇到的问题 别人的描述:https://cnodejs.org/topic/60c31420248d04610b4acab0
const saveCrawlerImg = async (dataSrc) => {
console.log(dataSrc);
let files = {

detailSrc: "",
coverSrc: "",

};

return new Promise((resolve) => {

axios
  .get(dataSrc, {
    responseType: "arraybuffer",
  })
  .then(async (res) => {
    let filename = Date.now() + ".jpg";
    fs.writeFile("./public/uploads/" + filename, res.data, async (err) => {
      if (err) {
        console.log(err);
      } else {
        files.detailSrc = IPAddress + "/uploads/" + filename;
        let coverName = filename.split(".")[0] + "_cover";
        await compressImg(
          `./public/uploads/${filename}`,
          coverName,
          "public/uploads/compress"
        );
        files.coverSrc =
          IPAddress + "/uploads/compress/" + coverName + ".jpg";
        resolve(files);
      }
    });
  });

});
};
复制代码
作者: Bill 本文地址: http://biaoblog.cn/info?id=1661512856065

版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!

相关文章
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
449 4
|
10月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
354 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
308 0
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
8月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
7047 23
|
10月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
230 10
|
JavaScript 前端开发 API
vue获取图片的blob传给django后端
vue获取图片的blob传给django后端
265 4
|
存储 开发框架 JavaScript
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
427 0
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
170 1
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
789 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题

热门文章

最新文章