通过HTTP链接获取图片文件,并将其转换为File格式

场景介绍:

  • 添加时上传图片,获取图片File文件上传至接口。
  • 编辑时,直接将img标签中src设置成http url回显图片。
  • 编辑时,不修改图片,保存时,接口仍需要图片的File文件格式。此时如果获取图片的File文件格式是个问题。

以下步骤,针对如何将http url转化为File格式做一个说明。
(1)思路:

  • 发起HTTP请求以获取图片数据
  • 将获取的数据转换为Blob数据
  • 使用Blob对象创建File对象

(2)解决方法:

  • 需要后端配合提供接口,返回logo图片
    在这里插入图片描述

  • 前端将返回值做处理

let init: any = {
      method: "get",
      mode: "cors",
      cache: "no-cache",
      headers: {
          "Content-Type": "application/octet-stream",
      },
  };
  fetch(`/api/xxx/xxxx/${columnVal.id}/`, init)
      .then((response) => {
          return response.blob();
      })
      .then((blob) => {
          // logoname为当前图片的名称,自行设置
          let file = new File([blob], logoname, { type: blob.type });
          // 更新 file参数,commonUpdate为自定义方法
          commonUpdate({ logoContent: file });
      })
      .catch((e:any) => {
          // 填入异常处理方法
      });
  • 注意事项:
    (1)切记不要直接将http image url做File文件转换,那是将url转为File格式,并不是真正的拿到了image的信息。可以通过上传时图片的size和转换后的size做对比,可看到明显区别
    (2)如果不想采用这种方法,可以和后端沟通,接口传参使用base64的格式,img src也接收base64直接展示,直接避免了上述问题的出现。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libhv是一个基于C++开发的轻量级网络库,用于处理HTTP请求。可以使用libhv来获取图片数据,并将其转换为base64编码。 以下是使用libhv库获取图片数据并转换为base64的示例代码: ```cpp #include <iostream> #include <fstream> #include <cstring> #include "hloop.h" #include "hsocket.h" #include "hbase64.h" void on_http_request(hloop_t* loop, hsocket_t* client, http_message_t* req) { // 从请求中获取图片URL const char* url = req->uri.full; // 发送HTTP请求获取图片数据 http_client_t* http_client = http_client_new(loop); http_request_t* http_req = http_request_new(url, HTTP_GET, NULL); http_req->on_response = [http_req](http_response_t* res) { if (res->status_code == 200) { // 将获取到的图片数据转换为base64编码 std::string base64_data = base64_encode(res->body.c_str(), res->body.size()); // 保存base64编码结果到文件或进行其他处理 std::ofstream file("image_base64.txt"); file << base64_data; file.close(); // 打印base64编码结果 std::cout << "Base64 data: " << base64_data << std::endl; } else { std::cerr << "Failed to download image: " << res->status_code << std::endl; } http_request_delete(http_req); }; http_client_send(http_client, http_req); } int main() { hloop_t loop; hloop_init(&loop); // 创建HTTP服务器 http_server_t* http_server = http_server_new(&loop); http_server->on_request = on_http_request; // 启动HTTP服务器 const char* host = "0.0.0.0"; int port = 8000; if (http_server_start(http_server, host, port) == 0) { std::cout << "Server running at http://" << host << ":" << port << std::endl; } else { std::cerr << "Failed to start server" << std::endl; return -1; } // 运行事件循环 hloop_run(&loop); // 清理资源 http_server_free(http_server); hloop_free(&loop); return 0; } ``` 上述代码创建了一个基于libhv的HTTP服务器,当收到HTTP请求时,会获取请求中的图片URL,并使用libhv内置的HTTP客户端发送请求来获取图片数据。然后,将获取到的图片数据转换为base64编码,并保存到文件中。 请确保你已经安装了libhv库,并在编译时链接相应的库文件。编译时需要添加"-lhv"参数,例如: ``` g++ main.cpp -o main -lhv ``` 这样就可以编译并运行上述代码来实现使用libhv库获取图片数据并转换为base64了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值