1

目前,我正在将文件从 ftp 服务器保存到 loal 目录中。但我想转向使用 ImageFields 使事情更易于管理。

这是当前的代码片段

file_handle = open(savePathDir +'/' +  fname, "wb")            
nvcftp.retrbinary("RETR " + fname, _download_cb)
file_handle.close()    
return savePathDir +'/' +  fname

这是我第一次尝试匹配。我现在只是为了兼容性而返回路径。稍后我将通过模型正确访问存储的文件。

new_image = CameraImage(video_channel = videochannel,timestamp = file_timestamp)
file_handle = new_image.image.open()
nvcftp.retrbinary("RETR " + fname, _download_cb)
file_handle.close()
new_image.save()
return new_image.path()

它是否正确?我对应该以什么顺序处理 file_handle 和 ImageField“图像”感到困惑

4

1 回答 1

1

你不见了_download_cb,所以我没有使用它。
参考Django 的文件对象。尝试

# retrieve file from ftp to memory,
# consider using cStringIO or tempfile modules for your actual usage

from StringIO import StringIO
from django.core.files.base import ContentFile
s = StringIO()
nvcftp.retrbinary("RETR " + fname, s.write)
s.seek(0)  
# feed the fetched file to Django image field
new_image.image.save(fname, ContentFile(s.read()))
s.close()

# Or
from django.core.files.base import File
s = StringIO()
nvcftp.retrbinary("RETR " + fname, s.write)
s.size = s.tell()
new_image.image.save(fname, File(s))
于 2012-04-21T10:48:40.863 回答