2009-03-15 27 views
7

Tôi đang sử dụng PyAMF để chuyển hình ảnh lớn được tạo động từ Flex sang Django. Ở phía Django, tôi nhận được dữ liệu encodedb64 dưới dạng tham số:Xử lý tệp ở Django khi đăng hình ảnh từ cuộc gọi dịch vụ

Mô hình mặt hàng của tôi làm hình ảnh. Điều tôi gặp phải là lưu dữ liệu dưới dạng Trường Django File.

def save_item(request, uname, data): 
    """ Save a new item """  
    item = Item() 

    img = cStringIO.StringIO() 
    img.write(base64.b64decode(data)) 
    myFile = File(img) 

    item.preview.save('fakename.jpg', myFile, save=False) 

Điều đó sẽ không làm việc vì đối tượng tập tin của tôi từ StringIO bỏ lỡ một số đặc tính như chế độ, đặt tên, vv

Tôi cũng nghĩ rằng bằng cách sử dụng StringIO sẽ nạp dữ liệu hình ảnh hoàn toàn trong bộ nhớ mà là xấu vì vậy tôi có thể từ bỏ AMF cho trường hợp cụ thể này và sử dụng POST.

Bạn nghĩ sao?

Trả lời

9

Trong django.core.files.base bạn có thể tìm thấy lớp học ContentFile. Lớp đó mở rộng lớp Django File cơ bản, vì vậy bạn không cần StringIO (mà ContentFile mặc dù sử dụng nội bộ). Phương thức lưu đã sửa đổi trông giống như sau:

from django.core.files.base import ContentFile 
def save_item(request, uname, data): 
    item = Item() 
    myFile = ContentFile(base64.b64decode(data)) 
    item.preview.save('fakename.jpg', myFile, save=False) 
Các vấn đề liên quan