我试图将文件上传到S3(实际上上传的作品),但我的应用程序崩溃,并引发了错误说:为S3上传使用博托我得到一个EOF错误
fp is at EOF. Use rewind option or seek() to data start.
我看到人们解决这个问题的一些方法是将rewind=True
添加到他们的set_contents_from_string调用中。然而,这将引发以下错误:
set_contents_from_string() got an unexpected keyword argument 'rewind'
以下是我views.py
的内容。我究竟做错了什么?
def store_in_s3(filename, filecontent):
conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
b = conn.create_bucket('mybucket')
mime = mimetypes.guess_type(filename)[0]
k = Key(b)
k.key = filename
k.set_metadata("Content-Type", mime)
k.set_contents_from_string(filecontent)
#k.set_contents_from_string(filecontent, rewind=True)
k.set_acl("public-read")
def add_m(request, points=None):
mname = request.GET.get ('mname')
format = request.GET.get ('format')
type = request.GET.get ('type')
if request.method == "POST":
formtoaddm = spiceform(request.POST, request.FILES)
if formtoaddm.is_valid():
new_m = formtoaddm.save(commit=False)
new_m.adder = request.user
mname = new_m.mname
file = request.FILES['content']
filename = file.name
filecontent = file.read()
store_in_s3(filename, filecontent)
...
好吧我想我通过在读它后加入: 'file.seek(0)'来修复它。但我不知道为什么。有人可以解释吗? – user1328021
file.seek(0)将读取光标放回到文件的开头,然后再次执行file.read()并再次获取所有内容。 – Spike
您是否尝试过使用此行取消注释:#k.set_contents_from_string(filecontent,rewind = True)? – dzida