- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 django-storages 访问我的“Hetzner”存储箱(https://www.hetzner.com/storage/storage-box)使用 SFTP,它应该保存媒体数据,即我网站的用户可以动态上传的图像文件.
我的 settings.py
文件的相应部分如下所示:
DEFAULT_FILE_STORAGE = 'storages.backends.sftpstorage.SFTPStorage'
SFTP_STORAGE_HOST = 'username.your-storagebox.de'
SFTP_STORAGE_ROOT = '/media'
SFTP_STORAGE_PARAMS = {
'username': 'username',
'password': 'password',
'allow_agent': False,
'look_for_keys': False,
}
奇怪的是,当用户上传图像时,它被放置在存储空间中,我可以使用 SFTP 确认。但是从存储盒中获取图像失败,没有图像显示。控制台摘录:
[03/Sep/2021 22:34:01] "GET /media/filename.jpg HTTP/1.1" 404 1962
我发现 Django 仍在我的 MEDIA_DIR
中寻找文件。再一次,我设置的相应部分:
MEDIA_DIR = 'media'
MEDIA_ROOT = os.path.join(BASE_DIR, MEDIA_DIR)
MEDIA_URL = '/media/'
简而言之:使用 SFTP 似乎可以将文件放入存储中,但以某种方式再次获取它们却失败了。
编辑:根据要求,我将提供更多代码片段:模型.py
:
class SizeRestrictedImageField(ImageField):
def __init__(self, *args, **kwargs):
self.max_upload_size = kwargs.pop('max_upload_size', 0)
super().__init__(*args, **kwargs)
def clean(self, *args, **kwargs):
data = super().clean(*args, **kwargs)
file = data.file
try:
if file.size > self.max_upload_size:
raise forms.ValidationError(_('Please keep filesize under %s. Current filesize %s'
) % (filesizeformat(self.max_upload_size),
filesizeformat(file.size)))
except AttributeError:
logger.exception('An Exception occured while checking for max size of image upload. size: `%s`'
, file.size)
pass
return data
class ImageModel(models.Model):
image = SizeRestrictedImageField(upload_to=POST_PIC_FOLDER, null=True, blank=True,
help_text="Erlaubte Dateitypen: .jpeg, .jpg, .png, .gif", max_upload_size=MAX_IMAGE_SIZE)
还有我的urls.py
:
urlpatterns = [
path('defaultsite/', defaultsite_view, name='home'),
path('help', help_view, name="help"),
path('user/', include('user.urls')),
path('sowi/', include('sowi.urls')),
path('blog/', include('blog.urls')),
path('chat/', include('chat.urls')),
path('notifications/', include('notifications.urls')),
path('cookies/', include('cookie_consent.urls')),
path('', home_view, name="home"),
path('about/', AboutUsView.as_view(), name="about-us"),
path('impressum/', impressum_view, name="imprint"),
path('privacy/', privacy_view, name='privacy'),
path('privacy/statement/', privacy_statement_view, name='privacy-statement'),
path('agb', agb_view, name="agb")
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
我尝试从我的 url-patterns 中删除 +static(...)
部分,但这似乎没有解决问题。
最佳答案
我觉得您可能忘记了在 Django 模型中迁移您的字段?在 django-storage
documentation on Github ,你有那些代码片段。
来自:
photo = models.FileField(
storage=FileSystemStorage(location=settings.MEDIA_ROOT),
upload_to='photos',
)
到:
photo = models.FileField(
upload_to='photos',
)
难道是这样吗? (如评论中所述,拥有一些代码片段会大有帮助。
Django-storage
act 有一个代理可以将你的文件保存在某个地方。我可以是一个s3 bucket,一个http cdn之类的。或者在您的情况下是 SFTP 服务器。
使用其他支持 HTTP 协议(protocol)的后端,很容易取回文件。因为后端将为您提供直接指向您存储的内容的链接。
对于SFTP,这就不同了,网页本身并不支持FTP协议(protocol)。因此,为了访问该文件,您必须在您的网页和 FTP 服务器之间创建一个代理层。
@action(methods=['get'], detail=True)
def download(self, request, pk=None):
try:
obj = ImageModel.objects.get(id=pk)
except ImageModel.DoesNotExist:
raise Http404
# with some SFTP client
# 1. check the file exist
# 2. pull the file from the server
# 3. attach it to the response with the proper header
stream = sftp_client.open(obj.file.name)
file = stream.read()
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
关于带 SFTP 的 Django 存储 : GET-requests fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69050396/
我知道使用 GET 和 SET 函数的公共(public)变量的缺点/私有(private)变量的优点,但目前我正在使用 Ogre3D 开发自己的第一个“真实”游戏(C++)..同时,我有时需要 6-
我正在开发一个 GSM/GPRS 应用程序,它将每 10 秒报告一些值。我必须使用的 SIM 卡每月只有 15MB 可用数据。我使用的是 SIM900 GSM 芯片供您引用。 我到达服务器的方式是通过
这三者有什么区别:gets - 它获取带有 '\n' 的行gets.chomp - 它得到一行,但删除 '\n' 这样对吗? gets.chomp! 怎么样? 最佳答案 gets - 它得到一个末尾带
问题和我现在遇到的问题 脚本 顺便说一句,评论是挪威语的,如果它们看起来很奇怪哈哈 Connect-AzureAD #variabel $Users = Get-AzureADUser -All:$t
我现在面临的问题是获取一个 URL,如下所示: www.example.com/example.php?url=www.google.com 现在的问题是,如果我的网址中有一个 get,如下所示: w
我有一个 queryString 传递给 servlet 的 doGet() 方法,如下所示: count=9&preId0=-99&objId0=-99&preId1=-99&objId1=-99&
这是我在 Django 模板中的代码: {% for tag in tags %} {{ tag }} {% endfor %} 在view.py中: def tag_find(
我正在尝试在express.js中为我的网络应用程序创建一个路由系统,我需要知道是否需要使用app.get/post/put/delete.apply以编程方式设置多个功能对于一条路线。 也是如此 a
我正在通过示例查看 A.Mele Django,第 1 章 def post_list(request, category=None): object_list = Post.publishe
如果我想找到与IIS站点或应用程序关联的目录,我该怎么做? 我似乎无法从Get-Website和Get-WebApplication的对象的任何属性中找到任何允许我这样做的东西。 最佳答案 只需查看一
不知道发生了什么。当我执行以下代码时......它运行良好......但它产生了错误。如果我将以下内容粘贴到我的浏览器地址栏中并点击它,我会得到一个 URL。如果我通过 KRL http:get 输入
Curl 提供了一系列不同的带有 X 前缀的 http 方法调用,但也提供了不带 X 的相同方法。我两种都试过了,但我似乎无法弄清楚其中的区别。有人可以快速向我解释这两种操作有何不同吗? 最佳答案 默
request.GET.get 是什么意思?我在 Django 中看到类似的东西 page = request.GET.get('page', 1) 我认为它与类似的东西有关 « 它们是如
我正在从我的 Angular2 站点查询一些 Elasticsearch 服务器。为了帮助提高安全性,我们希望锁定对 GET 请求的访问权限。 Elasticsearch 支持带主体的 GET,但我在
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
调用 HTable.get(List) 返回的 Result 数组的顺序是什么? ? 我的意思是,假设与输入列表的顺序相同是否正确? 最佳答案 结果数组中的顺序将与输入列表的顺序相同。与批处理方法一样
所以我有一个看起来像这样的 JSON 数组: var myData = { foo : { biz : 'baz', fig : 'tree' } }
我正在学习 Ajax、javascript 和 html,并且有一个应用程序可以触发“get”请求,然后再触发另一个“get”请求。这些请求是用户按下按钮的结果。在我的 servlet 中,我使用 T
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
运行以下 cmdlet 适用于组成员(Amer 域中的组)中的所有用户,无论列出的用户位于哪个域: Get-ADGroupMember -Server amer 但是,当尝试通过管道传输到 Get-
我是一名优秀的程序员,十分优秀!