2011-08-02 3 views
5

양식을 사용하여 이미지 (JPG)를 업로드 한 다음 해당 이미지를 Rackspace 'Cloud Files'또는 Amazon 'S3'으로 보내기 만하면됩니다.Django 업로드 이미지 - 양식이없는 Rackspace/S3에서 조작하지 않음

  • 파일을 조작하지 않음.

    • 하나 :
    • 디스크에 번호 저장은 메모리에 모든 것이
    • 이미지 크기가 75킬로바이트

    업데이트 (두주의 사항)를 초과하지 않습니다 (클라우드 서버에서 호스팅하고) : 전화 앱에서 데이터를 게시 할 때도 작동해야합니다.

  • 2 개 : Rackspace 클라우드 파일과 S3 (CF로 시작)로 전송해야합니다.

아래 코드는 작동하지만 너무 무거 우므로.

import cloudfiles as cf 
def uploadImage(request, id): 

    cf_con = cf.get_connection(username='YYY', api_key='XXX', serviceNet=True) 
    container = cf_con.get_container('container_name') 

    file = request.FILES["item_photo"] 
    f = StringIO(file.read()) 
    f = Image.open(f) 

    ### Only works if I resize for some reason, otherwise uploads a broken file 
    image = f.resize((600,600), Image.ANTIALIAS) 
    o = StringIO() 
    image.save(o, "JPEG", quality=80) 
    image = o.getvalue() 

    file_name = "%s/%s" % (id, '600x600.jpeg') 

    ### This simply uploads to Rackspace Cloud files. 
    put_file(container, file_name, image) 

정말 고마워요, 모두가 잘 희망 ...

라.

+1

혼란 스럽네요, 예제 코드가 이미지의 크기를 조정하지만 설명에서 _ 파일을 조작하지 못했습니다. 무엇 이니? 이미지의 크기를 조정하려면 현재 수행중인 작업이 많이 필요합니다. –

+1

고맙습니다 @stuart, 이미지 크기를 조정하고 싶지 않습니다. 조작하지 않고 업로드하려고했지만 위의 코드가 작동하지 않지만 너무 무거워서 크기가 조정 된 파일을 업로드했습니다. 완벽한 세계에서 나는 간단히 다음을 원합니다 : 'file = request.FILES [ "item_photo"]' 'file_name = "% s/% s"% (id, '600x600.jpeg')' 'put_file (container, file_name, file)' 그러나 그것은 나를 위해 작동하지 않습니다. – Danny

+0

분류 됨. 도와 주셔서 감사합니다. @stuart. – Danny

답변

3

파이썬을 모두 무시하고 s3에 직접 업로드하는 것은 어떻습니까?

s3 버킷을 구성하여 $ X 바이트보다 큰 파일을 업로드하지 못하게 할 수 있습니다.

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 
    <body> 
    <h3>refresh the page after you've submitted to see your new image</h3> 
    <div style="width:300px"> 
    <form action="http://s3.amazonaws.com/dev.sente" method="post" enctype="multipart/form-data"> 
     <fieldset> 
     <input type="hidden" name="acl" value="public-read" /> <br /> 
     <i>name of key:</i><input type="text" name="key" readonly="true" value="image.jpg" /> <br /> 
     <input name="file" type="file" /> <br /> 
     <input name="submit" value="Upload" type="submit" /> 
    </fieldset> 
    </form> 
    </div> 
    <br> 
    <a href="http://s3.amazonaws.com/dev.sente/image.jpg">http://s3.amazonaws.com/dev.sente/image.jpg</a> 
     <br> 
     <a href="http://s3.amazonaws.com/dev.sente/image.jpg"><img src="http://s3.amazonaws.com/dev.sente/image.jpg"></a> 
    </a> 
    </body> 
</html> 
+1

안녕하세요, 꽤 멋지 네요. 나는 그걸 생각하지 않았다. 내 유일한 문제는 두 가지주의 사항입니다. - One : 전화 앱에서 데이터를 게시 할 때도 작동해야합니다. - 2 : Rackspace 클라우드 파일로 전송해야합니다. – Danny

2

밖으로 정렬 :

여기 S3에 직접 업로드 (및 이미지 너비/높이 조건을 무시)

http://sente.cc/upload_to_s3.html

코드를 설명하는 간단한 예입니다. 더 단순하고 우아한 접근 방식을 찾았고 이전 버전에 도달하지 못해서 어리석은 느낌을줍니다.

file = request.FILES["item_photo"] 
file_name = "%s/%s" % (id, '600.jpeg') 
put_file(container, file_name, file.read())