怎么上传照片到文件上 怎样上传照片到文件里( 三 )


2. 获取accessKey和secretKey
通过查看开发者文档可知,调用SDK需要传入bucket、accessKey、secretKey三个参数
bucket的值就是存储空间的名称,accessKey和secretKey可以将鼠标悬浮在右上角的头像上然后点击密钥管理,然后创新密钥

怎么上传照片到文件上 怎样上传照片到文件里

文章插图

怎么上传照片到文件上 怎样上传照片到文件里

文章插图

3. DRF项目相关功能代码实现
  • 安装SDK
pip install qiniu
  • setting.py中存放密钥信息
# 七牛OSS存储配置QINIU_AK = \'XXXXXXXXXXXXX\'QINIU_SK = \'XXXXXXXXXXXXX\'QINIU_BUCKET = \'cuiliangoss\'QINIU_DOMAIN = \'https://oss.cuiliangblog.cn/\'
  • 配置请求token的API接口路由(urls.py)
from django.urls import pathfrom rest_framework import routersfrom public import viewsapp_name = "public"urlpatterns = [path(\'qiniuToken/\', views.QiniuTokenAPIView.as_view()),# 获取七牛上传token…………]router = routers.DefaultRouter()urlpatterns += router.urls
  • 编写视图函数(views.py),因为此处仅处理简单的响应,不涉及到模型操作,直接使用一级视图即可
from rest_framework import statusfrom rest_framework.response import Responsefrom rest_framework.views import APIViewfrom qiniu import Authfrom django.conf import settingsclass QiniuTokenAPIView(APIView):"""获取七牛上传文件token"""def get(request):q = Auth(settings.QINIU_AK, settings.QINIU_SK)token = q.upload_token(settings.QINIU_BUCKET)return Response({\'token\': token, \'domain\': settings.QINIU_DOMAIN}, status=status.HTTP_200_OK)
  • 使用API接口工具访问测试

怎么上传照片到文件上 怎样上传照片到文件里

文章插图

至此,后端API接口开发完成,短短几行代码,轻松而愉快的完成了后端的开发 。接来下才是整个项目最核心的部分,苦逼的前端工程师上岗了 。
六、前端-上传组件开发1. 上传组件分析
七牛对象存储支持多种多样的类型文件上传,虽然官方提供了详细的demo示例,但是在实际开发使用过程中,为了便于多个不同项目的移植和以及vue组件调用,因此将其封装为js的模块,当需要调用使用七牛的对象存储服务上传文件时,只需要传入上传文件的路径和文件对象即可 。函数在执行时,先请求后端API接口,获取本次上传文件的token和domain,并提取文件名加入时间戳,避免同一时间传入多张图片导致文件名冲突,最后调用七牛JavaScript-SDK实现文件上传,并返回成功上传的文件URL地址 。详细说明请参考官方文档:https://developer.qiniu.com/kodo/1283/javascript
2. 上传组件代码实现
  • API请求封装,具体请参考以前发布的文章https://www.cuiliangblog.cn/detail/article/12
import index from \'./index\'// 获取七牛图片上传tokenexport function getQiNiuToken() {return index.get(\'public/qiniuToken/\')}
  • 七牛文件上传模块
import * as qiniu from "qiniu-js";import {getQiNiuToken} from "@/api/public";function qiniuUpload() {//file是选择的文件对象const upload = (dir, file) => {return new Promise((resolve, reject) => {getQiNiuToken().then((response) => {let domain = response.domainlet token = response.tokenlet key = dir + \'/\' + file.name.substring(0, file.name.lastIndexOf(\'.\')) + \'-\' + new Date().getTime()+ file.name.substring(file.name.lastIndexOf(\'.\'))let config = {useCdnDomain: true,//表示是否使用 cdn 加速域名,为布尔值,true 表示使用,默认为 false 。region: qiniu.region.z1// 根据具体提示修改上传地区,当为 null 或 undefined 时,自动分析上传域名区域}let putExtra = {fname: "",//文件原文件名params: {}, //用来放置自定义变量mimeType: null//用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]};const observable = qiniu.upload(file, key, token, putExtra, config)observable.subscribe({next: (result) => {//主要用来展示进度console.log(result)},error: (error) => {//上传错误后触发console.log(error);reject(error)},complete: (result) => {//上传成功后触发 。包含文件地址 。let url = domain + result.key// console.log(url)resolve(url)},});}).catch(response => {//发生错误时执行的代码console.log(response)});})}return {upload}}export default qiniuUpload


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。