나는이 모델 이름업로드 이미지 파일을 아마존 S3 장고
utils.py
def asset_upload(instance, filename):
ctype = ContentType.objects.get_for_model(instance)
model = ctype.model
app = ctype.app_label
if model == 'product':
# Assets for a Product
user_id = instance.user.fs_uid
product_id = instance.id
output = 'user%s/product%s/assets/%s' % (user_id, product_id, filename)
elif model == 'category':
# Assets for a Product
user_id = instance.user.fs_uid
product_id = instance.id
output = 'user%s/category%s/assets/%s' % (user_id, product_id, filename)
else:
raise NotImplementedError("Unsupported model for Image Upload")
return output
에 따라 일부 폴더 구조를 만들어 로컬 폴더에 파일을 업로드 장고 모델
models.py
class Product(models.Model):
name = models.CharField(max_length = 36)
description = models.TextField(max_length = 2000)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
picture = models.ImageField(upload_to = utils.asset_upload, null = True, max_length = 250)
picture.allow_tags = True
형태. 평
class ProductForm(ModelForm):
class Meta:
model = Product
위의 코드에서 그래서
def product_creation(request):
product_form = ProductForm()
if request.method == 'POST':
product_form = ProductForm(request.POST,request.FILES)
if product_form.is_valid():
obj = product_form.save(commit=False)
obj........ = ....
obj.save()
return redirect(reverse('product_detail', args=[obj.id]))
return render_to_response('products/product.html',
{ 'product_form':product_form,},
context_instance = RequestContext(request))
views.py, 지금
/media/user235/product269/assets/buscuits_butter.png
/media/user235/product269/assets/choclate_pie.png
처럼 media
폴더로 성공적으로 이미지를 업로드 할 수 그러나 내가 원하는 수 위의 이미지를 로컬 파일 시스템 대신 Amazon s3
에 저장합니다.
그래서 인터넷 검색에 의해 난 다음 내가 이미지 아마존 S3에 저장됩니다 희망 (모든 자격 증명을 제공함으로써 그래서 위의 함수에서 난 콘텐츠와 함께 내 파일 경로를 보내는 경우 here
def store_in_s3(filename, content):
conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY)
b = conn.create_bucket("bucket_name")
mime = mimetypes.guess_type(filename)[0]
k = Key(b)
k.key = filename
k.set_metadata("Content-Type", mime)
k.set_contents_from_string(content)
k.set_acl("public-read")
같은 일부 코드를 발견)
그러나이 함수는 (일부 디렉토리 경로와 함께) 파일을 구현/전송하는 방법에 대해 confused
입니다.
upload_to = None
을 만들려고하지만, 또한 product: "picture": FileFields require an "upload_to" attribute.
지금 우리가 아는 한, 로컬 폴더에 파일 저장 피하고, 아마존 버킷에 저장하려는 오류를
가 발생그래서 사람이 할 수있는 제발 어떻게 hook/re arrange
내 위의 코드 파일 구조로 이미지를 업로드하려면 위의 모델 구조에 따라 생성 오전