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

如何在Laravel的API请求中返回图片而非JSON?

解决Laravel接口返回图片而非JSON的方案

你只需要替换当前的return $response->json();语句,改为直接返回接口响应的二进制图片内容,并设置正确的HTTP响应头,让浏览器识别为图片资源。

修改后的完整代码

class PostImageController extends Controller
{
    /**
     * @param Request $request
     */
    public function scan(Request $request)
    {
        $url = env('AZURE_FUNCTION_PYTHON_DOCUMENT_SCANNER_URL');
        $file = $request->file('document')->get();

        $response = Http::withHeaders([
            'Content-Type' => 'multipart/form-data',
        ])->attach(
            'document',
            $file,
            'image.jpeg',
        )->post($url, $request->all());

        // 检查请求是否成功
        if ($response->successful()) {
            // 获取原始图片二进制内容
            $imageContent = $response->body();
            // 优先使用Azure接口返回的Content-Type, fallback到默认图片类型
            $contentType = $response->header('Content-Type') ?? 'image/jpeg';

            // 返回图片响应
            return response($imageContent, 200)
                ->header('Content-Type', $contentType)
                // inline表示浏览器直接显示图片,若要让用户下载可改为attachment
                ->header('Content-Disposition', 'inline; filename="scanned-image.jpeg"');
        }

        // 请求失败时返回错误响应
        return response()->json(['error' => 'Image processing failed'], $response->status());
    }
}

关键说明

  • $response->body():获取Azure接口返回的原始二进制数据,而不是尝试解析成JSON。
  • response($imageContent, 200):创建包含图片内容的响应实例,状态码设为200(成功)。
  • Content-Type头:告诉浏览器这是图片资源,避免被当作普通文本解析。
  • Content-Disposition:控制图片的展示方式,inline让浏览器直接渲染图片,attachment则会触发下载行为,可根据需求调整。

额外提示

如果Azure接口可能返回不同格式的图片(比如PNG),不要硬编码image/jpeg,优先使用接口返回的Content-Type头能保证兼容性。

内容的提问来源于stack exchange,提问作者Silent observer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:20:26