七牛云成功保存但无法显示和访问{“error“:“download token not specified“}

在使用七牛云存储图片时,前端通过链接访问图片时遇到错误:

{"error":"download token not specified"}

具体表现为:

  • 后端通过 access_key 和 secret_key 生成了上传和下载的 Token。
  • 前端将域名与 res.key 拼接后生成图片链接。
  • 存储操作正常,但无法展示图片。
  • 直接通过图片链接访问时,报错提示未指定下载令牌。

解决方法

经过排查,发现问题是由于创建的存储空间为私有存储空间。对于私有存储空间,需要进行以下设置才能正常访问图片:

  1. 修改存储空间权限:将存储空间的权限从“私有”更改为“公开”。具体步骤如下:

    • 登录七牛云控制台。
    • 进入存储空间管理页面。
    • 找到对应的存储空间,点击进入详细页面。
    • 修改存储空间的权限为“公开”。
  2. 验证修改效果:修改完成后,再次尝试通过图片链接访问,此时应能正常显示图片。

改为公开

 

### 七牛云对象存储 Node.js SDK 使用教程 #### 安装依赖包 为了能够在Node.js环境中使用七牛云的对象存储服务,需先通过npm安装`qiniu`模块。这可以通过命令行工具执行如下命令完成[^2]: ```bash npm install qiniu ``` #### 初始化客户端实例 创建一个新的Qiniu客户端实例之前,需要设置Access Key (AK) Secret Key (SK),这是访问七牛云API所必需的身份验证凭据。 ```javascript const qiniu = require('qiniu'); // 设置全局的公钥私钥 qiniu.conf.ACCESS_KEY = 'your_access_key'; qiniu.conf.SECRET_KEY = 'your_secret_key'; // 创建上传认证对象 let mac = new qiniu.auth.digest.Mac(qiniu.conf.ACCESS_KEY, qiniu.conf.SECRET_KEY); ``` #### 文件上传功能实现 要向七牛云服务器上传文件,可以利用内置的方法来获取上传令牌,并调用相应的API接口发送数据流给指定的空间(bucket)[^1]: ```javascript async function uploadFile(filePath, keyName){ const bucket = "your_bucket_name"; // 获取上传token let putPolicy = new qiniu.rs.PutPolicy(bucket + ":" + keyName); let uptoken = putPolicy.token(mac); // 构建表单上传器 let formUploader = new qiniu.form_up.FormUploader(); let putExtra = new qiniu.form_up.PutExtra(); try { let result = await formUploader.putFile(uptoken, keyName, filePath, putExtra); console.log(`Upload Success! File URL: ${result.url}`); } catch(error){ console.error("Error occurred during file uploading:", error); } } ``` #### 文件下载链接生成 当想要提供一个可以直接用于浏览器或其他应用下载资源的URL时,可通过构建带有签名的有效期较短的一次性下载链接[^4]: ```javascript function getDownloadUrl(domainOfBucket, fileName, expiresInSeconds=3600){ var baseUrl = `${domainOfBucket}/${fileName}`; var privateUrl = qiniu.private_download_url(baseUrl, expiresInSeconds, mac); return privateUrl; } ``` #### 管理已存档文件 对于已经存在于云端空间中的文件,支持对其进行重命名、删除等管理操作。这里给出简单的例子展示如何移除特定名称下的文件项: ```javascript async function deleteFile(bucketName, keyToDelete){ let client = new qiniu.rs.Client(mac); try{ await client.delete(bucketName, keyToDelete); console.log(`${keyToDelete} has been deleted successfully.`); }catch(err){ console.error("Failed to delete the specified resource.", err); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值