복붙노트

[MONGODB] MongoDB를에 사진을 저장

MONGODB

MongoDB를에 사진을 저장

이 사용 토네이도 석유와 MongoDB를 수행하려합니다.

avat = self.request.files['avatar'][0]["body"]
nomfich = self.request.files['avatar'][0]["filename"]

try:
    image = Image.open(StringIO.StringIO(buf=avat))
    size = image.size
    type = image.format

    avatar = r"/profile-images/{0}/{1}".format(pseudo, nomfich)

except IOError:
    self.redirect("/erreur-im")

데이터베이스 코드 :

user={
    "pseudo": pseudo, 
    "password":password, 
    "email":email, 
    "tel":tel, 
    "commune":commune,    
    "statut":statut, 
    "nom":nom, 
    "prenom":prenom, 
    "daten":daten, 
    "sexe":sexe, 
    "avatar":avatar
}

self.db.essog.insert(user)  

그리고 일한의 "아바타"저장되지만 어떤 이미지, 그것은 단지 이름이 절약!

내 문제는 :

해결법

  1. ==============================

    1.당신은 반드시 MongoDB의 파일을 저장하기위한 GridFS 필요하지 않습니다, 그러나 분할을 처리하고 바이너리 데이터를 저장하기 때문에 메타 데이터도 제공하면서 확실하게, 그것에게 더 좋은 경험을합니다. 그런 다음 아바타 사진에 당신의 사용자 문서에 ID를 저장할 수 있습니다.

    당신은 반드시 MongoDB의 파일을 저장하기위한 GridFS 필요하지 않습니다, 그러나 분할을 처리하고 바이너리 데이터를 저장하기 때문에 메타 데이터도 제공하면서 확실하게, 그것에게 더 좋은 경험을합니다. 그런 다음 아바타 사진에 당신의 사용자 문서에 ID를 저장할 수 있습니다.

    코드에서 사용자가 데이터를 저장하지 않는 있지만 그 외에, 당신은 또한, 문서에 직접 바이너리 데이터를 저장할 수 있습니다. 당신은 단순히 PIL.Image 함께 열고있다, 그러나 그것으로 아무것도하지.

    당신이 당신의 드라이버 pymongo를 사용하는 가정, 난 그냥 이진 컨테이너에 이진 데이터를 포장 한 다음 저장되어 당신이 무엇을 할 수 있는지 생각합니다. 이것은 나에 의해 테스트되지 않은,하지만 난 그것을 작동합니다 가정 :

    from pymongo.binary import Binary
    
    binary_avatar = Binary(avat)
    
    user={
        ...
        "avatar":avatar,
        "avatar_file": binary_avatar
        ...
    }
    

    이제 존재가 말했다 ... 단지 자신과 사용 GridFS에 더 쉽게. 즉,이 의미있는 것이다.

    당신이 GridFS를 사용한다면, 그것은 다음과 같습니다

    from gridfs import GridFS
    
    avat_ctype = self.request.files['avatar'][0]["content_type"]
    
    fs = GridFS(db)
    avatar_id = fs.put(avat, content_type=avat_ctype, filename=nomfich)
    
    user={
        ...
        "avatar_name":avatar,
        "avatar_id": avatar_id
        ...
    }
    
  2. ==============================

    2.이 삽입 gridfs를 사용하지 않고 MongoDB의에서 이미지를 검색하는 코드입니다.

    이 삽입 gridfs를 사용하지 않고 MongoDB의에서 이미지를 검색하는 코드입니다.

    def insert_image(request):
        with open(request.GET["image_name"], "rb") as image_file:
            encoded_string = base64.b64encode(image_file.read())
        print encoded_string
        abc=db.database_name.insert({"image":encoded_string})
        return HttpResponse("inserted")
    
    def retrieve_image(request):
        data = db.database_name.find()
        data1 = json.loads(dumps(data))
        img = data1[0]
        img1 = img['image']
        decode=img1.decode()
        img_tag = '<img alt="sample" src="data:image/png;base64,{0}">'.format(decode)
        return HttpResponse(img_tag)
    
  3. ==============================

    3.오류가있다 :

    오류가있다 :

              from pymongo.binary import Binary
    

    정확한 구문은 :

              from bson.binary import Binary
    

    여러분의 끊임없는 성원에 모두 감사합니다

    루카

  4. ==============================

    4.사용해보십시오 carierwave-mongoid https://github.com/jnicklas/carrierwave-mongoid 나는이 경우에 당신을위한 간단하고 쉬운 방법이라고 생각

    사용해보십시오 carierwave-mongoid https://github.com/jnicklas/carrierwave-mongoid 나는이 경우에 당신을위한 간단하고 쉬운 방법이라고 생각

  5. ==============================

    5.당신은 pymongo의 바이너리 () 데이터 유형을 사용하여 이진 데이터를 저장해야합니다.

    당신은 pymongo의 바이너리 () 데이터 유형을 사용하여 이진 데이터를 저장해야합니다.

    http://api.mongodb.org/python/2.0/api/bson/binary.html#module-bson.binary

  6. from https://stackoverflow.com/questions/11915770/saving-picture-to-mongodb by cc-by-sa and MIT license