在Vercel无服务器函数中配置Google Vision的GOOGLE_APPLICATION_CREDENTIALS
在Vercel部署Google Vision OCR无服务器函数的认证问题解决方法
你遇到的问题根源在于,GOOGLE_APPLICATION_CREDENTIALS环境变量默认是指向凭据文件的路径,而不是直接存储JSON内容。Vercel的无服务器环境没法直接用文件路径的方式加载凭据,得换个方式直接传入解析后的JSON对象。
解决方法1:直接在代码中加载解析后的凭据
把你的service-key.json内容转成字符串存在Vercel的环境变量里(比如命名为GOOGLE_SERVICE_ACCOUNT),然后在代码里解析成对象传给客户端:
import vision from '@google-cloud/vision'; // 从环境变量解析服务账号凭据 const credentials = JSON.parse(process.env.GOOGLE_SERVICE_ACCOUNT); const client = new vision.ImageAnnotatorClient({ credentials }); const analyze = async (req, res) => { try { const [result] = await client.textDetection(req.body.image); res.send(result); } catch (err) { res.status(500).send({ error: err.message }); } }; export default analyze;
注意事项
- 在Vercel配置环境变量时,把service-key.json的内容直接粘贴进去,不要加额外的引号或者转义(Vercel会自动处理字符串格式)。
- 一定要确保环境变量在Vercel的生产环境中已经生效,部署前可以在Vercel控制台的"Environment Variables"里确认。
关于google-auth-library的补充
如果之前用这个库没成功,也是因为凭据加载方式不对。同样可以用上面的方法,把解析后的凭据传给auth客户端:
import { GoogleAuth } from 'google-auth-library'; const credentials = JSON.parse(process.env.GOOGLE_SERVICE_ACCOUNT); const auth = new GoogleAuth({ credentials, scopes: ['https://www.googleapis.com/auth/cloud-vision'] }); // 后续用auth获取令牌调用REST API即可
内容的提问来源于stack exchange,提问作者kzoeps
相关产品推荐
相关产品推荐

