You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Google Places photo接口未返回图片仅返回HTML链接如何解决

问题原因

Google Places Photo 接口本身不会直接在响应体返回图片二进制内容,接口设计逻辑是:收到合法请求后返回302重定向响应,响应头的Location字段才是真实的图片访问地址。你拿到HTML页面内容,一般是两个原因:

  • 请求没有正确处理302重定向逻辑,拿到了中间跳转页/错误提示页
  • API Key权限不足、photo_reference过期,被重定向到了错误提示HTML页面
解决方案

根据你的实际需求二选一调整代码即可:

  • 只需要可直接访问的图片直链:配置axios不自动跟随重定向,直接从302响应头提取Location字段
  • 需要拿到图片二进制内容(用于本地存储、转base64等场景):配置axios响应类型为二进制格式,让其自动跟随重定向获取最终图片数据

修正后的代码实现:

async function getFoto(foto){
    const api_key = "mykey"
    const requestUrl = `https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photo_reference=${foto}&key=${api_key}`
    try {
        // ---------- 方案1:获取真实图片直链 ----------
        const redirectResponse = await axios.get(requestUrl, {
            maxRedirects: 0, // 禁止自动跟随重定向
            validateStatus: status => status === 302 // 将302状态码视为正常响应
        })
        const realImageUrl = redirectResponse.headers.location
        console.log("真实图片直链:", realImageUrl)
        return realImageUrl

        // ---------- 方案2:直接获取图片二进制内容 (需要用就把上面的代码注释,放开下面这段) ----------
        // const imageResponse = await axios.get(requestUrl, {
        //     responseType: 'arraybuffer' // 大文件场景可替换为stream
        // })
        // return imageResponse.data // 返回值为图片二进制Buffer
    }catch(error) {
        console.log(error)
        return Promise.reject(error)
    }
}
额外注意
  • 如果是前端场景直接把图片显示到页面,不需要发起axios请求,直接把拼接好的photo接口地址放到<img>标签的src属性上即可,浏览器会自动处理302重定向加载图片
  • 提前确认API Key已经开通Places API权限,且没有做IP/域名限制导致鉴权失败
  • photo_reference存在有效期,过期后请求会失败,需要重新调用Place详情接口获取新的有效值

内容的提问来源于stack exchange,提问作者Matteo Della Ragione

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:30:42