首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用django-storage sftp下载文件?

如何使用django-storage sftp下载文件?
EN

Stack Overflow用户
提问于 2018-05-31 15:23:20
回答 1查看 2.3K关注 0票数 3

我正在使用django存储模块将文件存储在使用sftp的位置,现在我们需要从sftp下载相同的文件。

有什么建议吗?

models.py

代码语言:javascript
运行
复制
from storages.backends.sftpstorage import SFTPStorage
SFS = SFTPStorage()

class Configurations(BaseModel):
name = models.CharField(max_length=150, unique=True)
file = models.FileField(upload_to='configurations', storage=SFS)
descriptions = models.TextField(null=True, blank=True)

settings.py

代码语言:javascript
运行
复制
DEFAULT_FILE_STORAGE = 'storages.backends.sftpstorage.SFTPStorage'

SFTP_STORAGE_HOST = '127.0.0.1'
SFTP_STORAGE_ROOT = '/var/www/media/'
SFTP_STORAGE_PARAMS = {
    'username': 'root',
    'password': 'password',
    'allow_agent': False,
    'look_for_keys': False,
}
# SFTP_KNOWN_HOST_FILE = '~/.ssh/known_hosts'
SFTP_STORAGE_INTERACTIVE = False

views.py

代码语言:javascript
运行
复制
from django.http import Http404

from rest_framework import viewsets
from rest_framework.parsers import MultiPartParser, FormParser

from .models import (CustomConfigurations)
from .serializers import (CustomConfigurationsSerializers)


class ToolCustomConfigurationsViewSet(viewsets.ModelViewSet):
    queryset = CustomConfigurations.objects.all()
    parser_classes = (FormParser, MultiPartParser,)
    serializer_class = CustomConfigurationsSerializers

    def get_queryset(self):
        queryset = self.queryset.all().order_by('-id')
        return queryset

serializer.py

代码语言:javascript
运行
复制
class CustomConfigurationsSerializers(serializers.ModelSerializer):
class Meta:
    model = CustomConfigurations
    fields = '__all__'
EN

Stack Overflow用户

回答已采纳

发布于 2018-05-31 18:46:49

以下是我的解决方案:

代码语言:javascript
运行
复制
@action(methods=['get'], detail=True)
def download(self, request, pk=None):

    try:
        obj = CustomConfigurations.objects.get(id=pk)
    except CustomConfigurations.DoesNotExist:
        raise Http404

    if SFS.exists(obj.file.name):
        file = SFS._read(obj.file.name)
        type, encoding = mimetypes.guess_type(obj.file.name)
        response = HttpResponse(file, content_type=type)
        response['Content-Disposition'] = u'attachment; filename="{filename}'.format(
            filename=obj.file.name)
        return response
    raise Http404
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50618855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档