Django - FileField gitlab 存储文件
Max.Bai
2020-09
Django FileField 用来存储文件类型的字段,现成的有SFTP存储, 有dropbox, S3等,我需要gitlab存储文件,自己写一个存储中间件。
需要安装 pip install python-gitlab==2.5.0
保存的文件类型不限,保存大小有限制,文件转为base64 保存到gitlab,所以大小有限制,太大不能转base64.
如果只保存文本类型的就不需要转base64 保存。需要修改代码。
GitlabStorage文件
#!/usr/bin/env python
# coding: utf8
"""
project: ops_platform
create date: 2020/09/03
author: baikejian
"""
import base64
import logging
import os
import posixpath
from datetime import datetime
from django.conf import settings
from django.core.files.base import ContentFile, File
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from django.utils.six import BytesIO
from django.utils.six.moves.urllib import parse as urlparse
from gitlab import Gitlab
@deconstructible
class GitlabStorage(Storage):
def __init__(self, url, private_token, project_id, branch, api_version='3'):
'''
初始化gitlab实例
url: https://xxxxxxxxxxx.com
private_token:xsdfsdfsdfsdfsdfsdfsdf
project_id: 123
branch: master
'''
self.gitapi = Gitlab(url, private_token=private_token)
self.project = self.gitapi.projects.get(project_id)
self.branch = branch
self._base_url = self.project.attributes.get('web_url')
def _save(self, gitlab_path, content):
logging.debug("Start saving...")
logging.debug(type(content))
commit_data = self.__create_commit_file_data(content, gitlab_path, f'auto commit {datetime.now()}')
# commit file

本文介绍如何在Django中使用FileField将文件存储到Gitlab,包括安装python-gitlab库、处理文件上传与下载,以及前端交互。
最低0.47元/天 解锁文章
1709

被折叠的 条评论
为什么被折叠?



