我可以将文件上传到'/peaceroot/www/media/'
我已设置的媒体文件夹(),settings.py
如下所示
MEDIA_ROOT = '/peaceroot/www/media/'
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)
但通过管理员我试图访问上传的图像文件
HTTP://本地主机:8000 /媒体/项目/ 1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg
然后我收到404错误.
该文件存在于 peaceroot/www/media/items/1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg
我正在尝试在heroku上部署我的django应用程序.所有静态文件都由whitenoise
成功提供并迁移.但是如何ImageField
在生产期间获取用于上传的媒体文件.
我的 settings.py
STATIC_URL = '/static/'
STATIC_ROOT = 'C:/Users/Sak/mpro/feat/static/'
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
Run Code Online (Sandbox Code Playgroud)
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mpro.settings")
application = get_wsgi_application()
try:
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
from dj_static import Cling
application = Cling(get_wsgi_application())
except:
pass
Run Code Online (Sandbox Code Playgroud)
urls.py
urlpatterns = [
url(r'^', include('feat.urls', namespace="feat")),
url(r'^admin/', include(admin.site.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
我的所有媒体文件都上传到base_dir/media/media
,当whitenoise
收集静态文件时,它只收集文件STATIC_ROOT
,所以如何部署我的媒体文件.当我运行时,heroku …
我正在使用Django的模型并且非常好.如果存在与之关联的验证错误,如何突出显示实际文本框(例如border:red).基本上我想要的是在字段存在验证错误时添加类(错误).
我已经在openshift中成功部署了我的Django项目.但我需要能够提供用户上传的文件.我为此用户MEDIA_ROOT和MEDIA_URL.我在这里遵循了本教程,但没有任何反应.我不得不改变MEDIA_ROOT,因为我认为那是不正确的.所以我的MEDIA_ROOT看起来像
MEDIA_ROOT = os.path.join(os.environ.get('OPENSHIFT_DATA_DIR', ''),'media')
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)
我在/ wsgi文件夹中添加了.htaccess,正如文章中所述
RewriteEngine On
RewriteRule ^application/media/(.+)$ /static/$1 [L]
Run Code Online (Sandbox Code Playgroud)
并且创建了构建脚本,以便在文章中提到静态媒体的符号链接.
#!/bin/bash
if [ ! -d $OPENSHIFT_DATA_DIR/media ]; then
mkdir $OPENSHIFT_DATA_DIR/media
fi
ln -sf $OPENSHIFT_DATA_DIR/media $OPENSHIFT_REPO_DIR/wsgi/static/media
Run Code Online (Sandbox Code Playgroud)
在我的urls.py中,我添加了
urlpatterns += static(settings.MEDIA_ROOT, document_root=settings.MEDIA_URL)
Run Code Online (Sandbox Code Playgroud)
但我仍然不能为他们服务.我也尝试不在urls.py中包含django静态方法,但结果相同.
在另一个教程中.htacces放在静态文件夹中.难道我做错了什么?
我试图在我的应用程序中使用django-storage与s3boto并尝试从s3提供媒体和静态文件.
我的设置文件中有以下设置:
AWS_STORAGE_BUCKET_NAME = '<bucket_name>'
AWS_S3_ACCESS_KEY_ID = '<access_key>'
AWS_S3_SECRET_ACCESS_KEY = '<secret>'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = '<custom_storage_satic>'
MEDIAFILES_LOCATION = 'media'
DEFAULT_FILE_STORAGE = '<custom_storage_media>'
Run Code Online (Sandbox Code Playgroud)
我的custom_storages.py是
from django.conf import settings
from storages.backends.s3boto import S3BotoStorage
class StaticStorage(S3BotoStorage):
location = settings.STATICFILES_LOCATION
class MediaStorage(S3BotoStorage):
location = settings.MEDIAFILES_LOCATION
Run Code Online (Sandbox Code Playgroud)
当我在django中创建图像时,而不是从我的图像开始的相对路径
image.url
'/media/image/<rest_of_the_path>.jpg'
Run Code Online (Sandbox Code Playgroud)
我得到了绝对的网址,就像这样
image.url
'https://<s3_bucket_name>.s3.amazonaws.com/media/image/original/'
Run Code Online (Sandbox Code Playgroud)
当我使用本地存储而不是s3boto时,它按预期工作并给我相对路径.我在这里错过了什么吗?
媒体目前在我的本地开发机器上.
我的MEDIA_ROOT,MEDIA_URL,ADMIN_MEDIA_PREFIX并指定如下:
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media")
MEDIA_URL = '/media/'
SITE_URL = 'http://localhost:80'
ADMIN_MEDIA_PREFIX = '/media/admin/'
Run Code Online (Sandbox Code Playgroud)
没有'admin'文件夹,但这不应该有所作为我不认为.在urls.py文件中我有:
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
Run Code Online (Sandbox Code Playgroud)
我不知道应该怎样做才能让它发挥作用.[我正在尝试学习django并且正在使用一个非常多毛的现有项目]
我有一个应用程序,允许用户上传带有数据的CSV文件,然后将数据绘制成图形并显示给用户.这些文件在媒体文件夹中保存为媒体.但是在我的图表视图中,我需要打开文件并进行处理.我的问题是我只能打开项目当前工作目录中的文件,并且每当我尝试从该目录之外的某个位置上传文件时,我都会收到此错误:
File b'TEST.CSV' does not exist
Run Code Online (Sandbox Code Playgroud)
我试过这个,但没有成功:
file_upload_dir = os.path.join(settings.MEDIA_ROOT, 'Data_Files')
data_file = open(os.path.join(file_upload_dir, new_file), 'rb')
Run Code Online (Sandbox Code Playgroud)
该变量new_file
只是从会话中保存的文件的名称,而不是该文件的路径.Data_Files
是媒体目录中包含上载文件的目录.
我的Django媒体设置是
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
Run Code Online (Sandbox Code Playgroud)
有没有办法从视图中正确引用媒体文件?
这是file_upload_dir
新文件的输出和位置.
>>> print(file_upload_dir)
C:\\Users\\vut46744\\Desktop\\graphite_project\\media\\Data_Files
>>> print(os.path.join(file_upload_dir, new_file))
C:\\Users\\vut46744\\Desktop\\graphite_project\\media\\Data_Files\\TEST.CSV
Run Code Online (Sandbox Code Playgroud) 用户上载图像时,图像存储在media
项目目录内的文件夹中。问题在于,当他们希望在网站上看到它时,nginx 403 Forbidden
对于大约3 Mb以上的图像返回错误。
我设定nginx.conf
client_max_body_size
为8M
http {
##
# Basic Settings
##
client_max_body_size 8M;
...
Run Code Online (Sandbox Code Playgroud)
并且已经更改了内存大小settings.py
:
FILE_UPLOAD_MAX_MEMORY_SIZE = 8388608
Run Code Online (Sandbox Code Playgroud)
当我上传3 MB以下的图像时,没有问题,如果我上传3 MB以上的图像,则可以在media
文件夹中看到它,但是会出现错误,而不是提供图像:
GET https://example.com/media/images/dom.jpg 403 (Forbidden)
Run Code Online (Sandbox Code Playgroud)
我注意到3 MB以下的文件具有不同的权限:
-rw-r--r-- 1 django www-data 4962 Jul 19 19:51 61682_3995232_IMG_01_0000.jpg.150x84_q85_crop.jpg
-rw-r--r-- 1 django www-data 1358541 Jul 20 09:32 byt.jpg
-rw------- 1 django www-data 3352841 Jul 20 09:32 dom.jpg
-rw-r--r-- 1 django www-data 5478 Jul 19 20:10 downloasd.jpeg.150x84_q85_crop.jpg
-rw-r--r-- 1 django www-data 3225 Jul …
Run Code Online (Sandbox Code Playgroud) 我正在使用 nginx、gunicorn、postgresql 在生产模式(debug=false)下测试我的 django 应用程序。
虽然我能够渲染静态文件,但无法访问存储在“media”文件夹中的文件。
在我的 settings.py 中,以下是设置的变量:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# also tried another combination: MEDIA_ROOT = 'media'
Run Code Online (Sandbox Code Playgroud)
同样在 urls.py 中 MEDIA_ROOT 设置如下:
urlpatterns = [
path('admin/', admin.site.urls),
path('venter/', include('appname.urls')),
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)
在我的 /etc/nginx/sites-available/ 文件中,我有以下设置:
server {
listen 80;
server_name website.com www.website.com ;
location = /favicon.ico { access_log off; log_not_found off; }
location /static {
root /home/a/btawebsite;
}
location /media/ {
root /home/a/btawebsite;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/a/myproject.sock;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在渲染存储在我的 …
我在 Django 项目中使用了storages.backends.s3boto.S3BotoStorage
for my 。DEFAULT_FILE_STORAGE
理想情况下,我想FileSystemStorage
在单元测试期间使用默认值,或者创建一个临时存储桶,在测试结束时将其删除。
实现这一目标的最佳方法是什么?
django ×10
django-media ×10
python ×8
nginx ×2
amazon-s3 ×1
boto ×1
django-forms ×1
file-io ×1
heroku ×1
openshift ×1