Friday, August 6, 2010

Re: Amazon S3 Boto

Take a look at django-storages, it's what we use to store audio files in S3. It's a pretty robust django storage backend with decent community support.

On Aug 6, 2010, at 5:06 AM, almacmillan wrote:

> Hi there,
>
> I am a total beginner to programming and Django so I'd appreciate help
> that beginner can get his head round!
>
> I was following a tutorial to show how to upload images to an Amazon
> S3 account with the Boto library but I think it is for an older
> version of Django (I'm on 1.1.2 and Python 2.65) and something has
> changed. I get an error:
> Exception Type: TypeError
> Exception Value: 'InMemoryUploadedFile' object is unsubscriptable
>
> My code is:
>
> Models.py
>
> from django.db import models
> from django.contrib.auth.models import User
> from django import forms
> from datetime import datetime
>
> class PhotoUrl(models.Model):
> url = models.CharField(max_length=128)
> uploaded = models.DateTimeField()
>
> def save(self):
> self.uploaded = datetime.now()
> models.Model.save(self)
>
> views.py
> import mimetypes
> from django.http import HttpResponseRedirect
> from django.shortcuts import render_to_response
> from django.core.urlresolvers import reverse
> from django import forms
> from django.conf import settings
> from boto.s3.connection import S3Connection
> from boto.s3.key import Key
>
> def awsdemo(request):
> def store_in_s3(filename, content):
> conn = S3Connection(settings.AWS_ACCESS_KEY_ID,
> settings.AWS_SECRET_ACCESS_KEY)
> b = conn.create_bucket('almacmillan-hark')
> mime = mimetypes.guess_type(filename)[0]
> k = Key(b)
> k.key = filename
> k.set_metadata("Content-Type", mime)
> k.set_contents_from_strong(content)
> k.set_acl("public-read")
>
> photos = PhotoUrl.objects.all().order_by("-uploaded")
> if not request.method == "POST":
> f = UploadForm()
> return render_to_response('awsdemo.html', {'form':f,
> 'photos':photos})
>
> f = UploadForm(request.POST, request.FILES)
> if not f.is_valid():
> return render_to_response('awsdemo.html', {'form':f,
> 'photos':photos})
>
> file = request.FILES['file']
> filename = file.name
> content = file['content']
> store_in_s3(filename, content)
> p = PhotoUrl(url="http://almacmillan-hark.s3.amazonaws.com/" +
> filename)
> p.save()
> photos = PhotoUrl.objects.all().order_by("-uploaded")
> return render_to_response('awsdemo.html', {'form':f,
> 'photos':photos})
>
> urls.py
>
> (r'^awsdemo/$', 'harkproject.s3app.views.awsdemo'),
>
> awsdemo.html
>
> <div class="form">
> <strong>{{form.file.label}}</strong>
> <form method="POST" action ="." enctype="multipart/form-data">
> {{form.file}}<br/>
> <input type="submit" value="Upload">
> </form>
> </div>
>
> I'd really appreciate help. I hope I have provided enough code.
>
> Kind regards
> AL
>
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
>

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment