node+uniapp实现上传图片到七牛云

node+uniapp实现上传图片到七牛云

参考文章:https://segmentfault.com/a/1190000014137083 (vue前端(element-ui),express后端实现上传图片到七牛云)

  1. 注册七牛云账号
    七牛云官网:https://www.qiniu.com/

  2. 在千牛云创建空间和域名
    jfzfg.com是本人的网站域名,换成自己的即可
    在这里插入图片描述
    域名

  3. 在阿里云绑定刚才创建的二级域名
    阿里云

  4. node配置

//初始化——添加配置
npm init
npm i express qiniu --save



//index.js---

// 引入包
const express = require('express')
const bodyparse = require('body-parser')
// 创建服务
const app = express()
// 解析数据
app.use(bodyparse.json())
// 引入七牛云配置
const qnconfig = require('./config.js')
// 处理请求
app.get('/token', (req, res, next) => {
  // console.log(qnconfig.uploadToken)
  res.status(200).send(qnconfig.uploadToken)
})
// 监听3000端口
app.listen(3000, () => {
  console.log('this server are running on localhost:3000!')
})


//config.js---

/*
七牛云配置
*/
const qiniu = require('qiniu')

// 创建上传凭证(accessKey 和 secretKey在七牛云个人中心中有,lytton是七牛云刚才创建的空间名称)
const accessKey = 'YOXpF0XvM_3yVDsz5C-hWwrFE5rtDAUQC3XjBQEG'
const secretKey = 'CmrhUV2xHf1d8nPCsws9wwm7jKypCPA0lRVm-7lS'
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey)
const options = {
  scope: 'lytton',
  expires: 7200
}
const putPolicy = new qiniu.rs.PutPolicy(options)
const uploadToken = putPolicy.uploadToken(mac)

module.exports = {
  uploadToken
}

uniapp配置

<template>
	<view class="home">
		测试
		<button @click="upimg">图片上传</button>
		<image :src="backUrl"></image>
	</view>
</template>

<script>
	const Home = require("../../model/Home.js"); //获取应用实例
	export default {
		data() {
			return {
				backUrl:''
			}
		},
		mounted() {

		},
		methods: {
			upimg() {
				let that=this
				uni.chooseImage({
					count: 1, //默认9
					sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
					sourceType: ["album", "camera"], //从相册选择
					success: function(res) {
						uni.showLoading({
							title: "",
							mask: true
						});
						//Home.token是本人请求token的接口封装
						Home.token({
							data: {},
							succ: (suc1) => {
								console.log("token",suc1)
								let img = res.tempFilePaths[0]; //拿到里面的
								//下面的key是自己拿时间戳和随机数组成的key值
								let key = new Date().getTime();
								uni.uploadFile({
									url: "https://up-cn-east-2.qiniup.com", //这个url是根据刚才创建七牛云空间地区有关系,我选的是华东-浙江2
									filePath: img,
									name: 'file',
									method: "POST",
									formData: {
										'key': key, //key值
										'token': suc1.token //七牛云token值
									},
									success: uploadFileRes => {
										//uploadFileRes 返回了data是一个json字符串 
										//拿到里面的key拼接上域名,再反出去就ok了
										let strToObj=JSON.parse(uploadFileRes.data);
										console.log("uploadFileRes",strToObj)
										let	backUrl = "http://mi.jfzfg.com/" + strToObj.key;
										// data.success(backUrl); //反出去链接
										console.log('成功的图片链接',backUrl)
										that.$data.backUrl=backUrl
										uni.hideLoading();
									},
									fail: fail => {
										uni.showToast({
											title: "网络错误",
											icon: "none"
										});
										// data.fail(fail); //反出去错误信息
										uni.hideLoading();
									}
								})
							},
							fail: fail => {
								uni.showToast({
									title: "网络错误",
									icon: "none"
								});
								uni.hideLoading();
							}
						})

					},
				});
			}
		}
	}
</script>

<style>
	.home {}
</style>

希望对大家有所帮助

qq:2122375078
b站:行路zfg , UID:345976264

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 首先,需要在七牛云上创建一个存储空间,并获取该存储空间的accessKey、secretKey、bucket和domain。 2. 在Springboot中引入七牛云的Java SDK,可以通过Maven或Gradle进行引入。例如,在Maven中添加以下依赖: ``` <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.2.99]</version> </dependency> ``` 3. 创建一个七牛云的配置类,用于存储accessKey、secretKey、bucket和domain等配置信息。 ``` @Configuration public class QiniuConfig { @Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.secretKey}") private String secretKey; @Value("${qiniu.bucket}") private String bucket; @Value("${qiniu.domain}") private String domain; @Bean public Auth auth() { return Auth.create(accessKey, secretKey); } @Bean public Configuration configuration() { return new Configuration(Zone.zone0()); } @Bean public UploadManager uploadManager() { return new UploadManager(configuration()); } @Bean public BucketManager bucketManager() { return new BucketManager(auth(), configuration()); } @Bean public StringMap putPolicy() { StringMap putPolicy = new StringMap(); putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"name\":\"$(fname)\",\"size\":$(fsize)}"); return putPolicy; } @Bean public String uploadToken() { return auth().uploadToken(bucket, null, 3600, putPolicy()); } @Bean public String domain() { return domain; } } ``` 4. 在Vue中使用element-ui的上传组件,设置上传的接口为Springboot的接口。 ``` <el-upload class="upload-demo" action="/api/upload" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload" :headers="{Authorization: 'Bearer ' + token}" > <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> ``` 5. 在Springboot中编写上传接口,在该接口中使用七牛云的Java SDK进行上传。 ``` @RestController @RequestMapping("/api") public class UploadController { @Autowired private UploadManager uploadManager; @Autowired private String uploadToken; @Autowired private String domain; @PostMapping("/upload") public ResponseEntity<?> upload(@RequestParam("file") MultipartFile file) throws IOException { try { Response response = uploadManager.put(file.getBytes(), null, uploadToken); if (response.isOK()) { String key = JSON.parseObject(response.bodyString()).getString("key"); return ResponseEntity.ok(domain + "/" + key); } } catch (QiniuException e) { e.printStackTrace(); } return ResponseEntity.badRequest().build(); } } ``` 6. 程序运行后,在Vue中上传图片即可自动将图片上传到七牛云,并返回图片的访问URL。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值