node实现图片上传至oss

描述:

  1. 前端使用 input="file 上传图片。
  2. 后端实现图片上传接口,图片上传至 oss 并将上传的 url 返回给前端。
// node 实现
let OSS = require('ali-oss')
let client = new OSS({ // 连接OSS实例
  region: '',
  accessKeyId: '',
  accessKeySecret: '',
  bucket: '',
});

// 实现上传的 upload 接口
// 图片以 base64 的方式传输
app.post('/upload', async (req, res) => {
  try {
    const filename = `${Date.now()}${req.body.name}`
    const catalog = `/images/${filename}`
    /* 此处的catalog指的是上传的文件存储在当前Bucket或Bucket下的指定目录 */
    let result = await client.put(catalog, Buffer.from(req.body.file, 'base64'));
    res.send({
      result
    })
  } catch (e) {
    res.send({
      result: false,
      errMsg: e
    })
  }
})
<!-- 前端实现 -->
<input type="file" accept="image/*" id="upload" @change="upload(event)">

<script>
function upload (e) {
  var file = e.target.files[0]
  if(file){
    var name = e.target.files[0].name
    var reader = new FileReader();
    reader.onload = function (event) {
      var base64 = event.target.result
      var base64Data = base64.replace(/^data:image\/\w+;base64,/, '')
      console.log('base64Data', base64Data)
      axios.post('/upload', {
      	name,
      	file: base64Data
      }).then(res => {
      	console.log('url', res.data.result.url)
	  })
    };
    reader.readAsDataURL(file); // 将 Blob 或 File 对象转成base64
  }
}
</script>

注意事项:

1.上传的base64数据需要手动剔除前缀。
2.node 中 body-parser 中运行传输的数据大小为 100kb,因此需要修改配置保证大数据也能传输。

app.use(bodyParser.json({
  limit : '100000kb'
})) 

3.如果有用到nginx,需要修改nginx.conf中的 client_max_body_size 20m;否则大图片是无法传输成功的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 UniApp 中实现图片OSS(对象存储服务)的功能,你可以使用uni-app插件`uni.uploadFile`来实现。 首先,你需要将 OSS 的配置信息设置好,包括 `accessKeyId`、`accessKeySecret`、`bucket`、`region` 等信息。你可以将这些信息保存在配置文件中或者通过接口获取。 然后,在页面中添加一个按钮,用于触发选择图片和上功能: ```html <template> <view> <button @click="chooseAndUpload">选择图片并上</button> </view> </template> ``` 接下来,在页面的对应的 Vue 实例中,定义 `chooseAndUpload` 方法来触发选择图片和上: ```javascript <script> export default { methods: { chooseAndUpload() { uni.chooseImage({ count: 1, success: (res) => { const tempFilePaths = res.tempFilePaths this.uploadImage(tempFilePaths[0]) }, }) }, uploadImage(filePath) { uni.uploadFile({ url: 'https://your-oss-endpoint', // 替换为你的 OSS地址 filePath, name: 'file', formData: { key: 'your-oss-key', // 替换为你的 OSS 对象存储路径和文件名 policy: 'your-oss-policy', // 替换为你的 OSS策略 OSSAccessKeyId: 'your-access-key-id', // 替换为你的 OSS AccessKeyId signature: 'your-oss-signature', // 替换为你的 OSS 签名 success_action_status: '200', // 上成功的状态码 }, success: (res) => { console.log(res.data) // 上成功后的响应数据 }, }) }, }, } </script> ``` 在 `chooseAndUpload` 方法中,我们使用 `uni.chooseImage` 方法来选择一张图片,然后将选中的图片路径递给 `uploadImage` 方法进行上。在 `uploadImage` 方法中,我们使用 `uni.uploadFile` 方法来实现图片功能。 注意替换 `https://your-oss-endpoint` 为你的 OSS地址,并填充相应的 OSS 配置信息。 这样,当点击页面中的按钮后,就会触发选择图片并上OSS 的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值