图片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 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!

相关文章
|
11天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
12天前
|
前端开发 小程序 Java
uniapp上传图片 前端以及java后端代码实现
uniapp上传图片 前端以及java后端代码实现
28 0
|
7天前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。
|
8天前
|
Web App开发 移动开发 运维
跨域解决方案[前端+后端]
跨域解决方案[前端+后端]
21 0
|
9天前
|
JavaScript 前端开发 API
游戏开发入门:Python后端与Vue前端的协同工作方式
【4月更文挑战第11天】使用Python后端(Flask或Django)和Vue.js前端开发游戏变得流行,能提高开发效率和可维护性。本文指导如何构建这样的项目,包括设置环境、创建虚拟环境、搭建后端API及前端Vue组件,强调前后端协作和API接口的重要性。这种架构促进团队合作,提升代码质量和游戏体验。
|
10天前
|
供应链 JavaScript 前端开发
使用Django和Vue实现电子商务网站的后端和前端
【4月更文挑战第10天】本文介绍了使用Django和Vue构建电子商务网站的后端与前端方法。Django作为Python的Web框架负责后端,其模型-视图-控制器设计简化了商品管理、购物车和订单处理。Vue.js用于前端,提供数据驱动和组件化的用户界面。通过定义Django模型和视图处理请求,结合Vue组件展示商品和管理购物车,开发者可构建交互性强的电商网站。虽然实际开发涉及更多细节,但本文为入门提供了基础指导。
|
11天前
|
JavaScript
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
【归总】原生js操作浏览器hash、url参数参数获取/修改方法合集
|
23天前
|
前端开发 JavaScript NoSQL
从前端到后端:构建全栈应用的技术挑战与解决方案
在当今互联网时代,全栈开发成为越来越受欢迎的技术趋势。本文将深入探讨从前端到后端的全栈开发过程中所面临的技术挑战,并提出相应的解决方案,涵盖前端框架选择、后端技术架构、数据库设计以及跨平台兼容性等关键问题。
|
12天前
|
JavaScript
vue截取URL中的参数
vue截取URL中的参数
12 0
|
2月前
|
前端开发
[牛客网-前端大挑战QD2] 获取url参数
[牛客网-前端大挑战QD2] 获取url参数
19 0