【前端】ajax 接口返回图片文件流,将图片保存至自己服务器,并展示该图片

5 篇文章 2 订阅
2 篇文章 0 订阅

一、解决前

1.1 问题描述

ajax 调用第三方接口,接口没有返回图片链接,直接返回的图片。现在要将文件保存至服务器,并返回自身的链接。

// 解决前的代码
let formData = new FormData();
formData.append('file', $("input[name='file']")[0].files[0]);
formData.append('secret', data.field.secret);

$.ajax({
     url: url,
     type: "POST",
     processData: false,
     contentType: false,
     data: formData,
     success: function (data) {
         console.log(data);
     }
 });

在这里插入图片描述
在这里插入图片描述

二、解决后

解决方式就是: 不用 ajax 请求,改为使用 XMLHttpRequest

2.1 问题解决

// JavaScript 代码

var formData = new FormData();
formData.append('file', $("input[name='file']")[0].files[0]);
formData.append('secret', data.field.secret);

let loading = layer.load(2, {shade: [0.1,'#fff'], time: false});

var xhr = new XMLHttpRequest();
xhr.open("post", "https://dev.hiding.com.cn/imagetrace/encode", true);
xhr.responseType = "blob";
xhr.onload = function() {
    layer.close(loading);
    var blob = this.response;
    var formData1 = new FormData();
    formData1.append('file', blob);

    $.ajax({
        type: "post",
        url: "/index/writeRequest",
        async: true,
        data: formData1,
        processData: false,
        contentType: false,
        success: function(res) {
            let response = eval('(' + res + ')');
            if (response.code == 0){
                layer.msg('加密成功,请长按图片保存');
                $("#img_container").attr('src', response.data);
            } else {
                layer.msg('加密失败,请稍后重试');
            }
            return false;
        }
    });
}
xhr.send(formData);

return false;
// php 代码,自身根据需求改动,上传至 oss 等
$tmp_name = $_FILES['file']['tmp_name'];
$name = time() . rand(10000, 99999) . '.jpeg';
$dir_name = WEB_PUBLIC_URL . '/static/images/write/' . $name;
$file_url = WEB_BASE_URL . '/static/images/write/' . $name;
$response = move_uploaded_file($tmp_name, $dir_name);
if($response){
    return json_encode(['code'=>0, 'msg'=>'成功', 'data'=>$file_url]);
} else {
    return json_encode(['code'=>1001, 'msg'=>'失败', 'data'=>'']);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

后端木木

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

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

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

打赏作者

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

抵扣说明:

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

余额充值