Python 将文件上载到BlobField django appengine时发生BadKeyError

Python 将文件上载到BlobField django appengine时发生BadKeyError,python,django,google-app-engine,blobstore,django-nonrel,Python,Django,Google App Engine,Blobstore,Django Nonrel,我正在尝试将一个文件(小于100kb)上载到django appengine中的blob字段。但是,我不断遇到以下错误: BadKeyError:无效的字符串键ahVkZXZ-DG9REW8TYW1WAG9YYS0ZNZLYIGSSF9FQMXVYLVBG9HZFNLC3NPB25FXXIAGICKCQW/ 以下是我的部分代码: models.py views.py 我做错了什么 以下是FileField方法: models.py views.py 但是我仍然会遇到同样的错误。使

我正在尝试将一个文件(小于100kb)上载到django appengine中的blob字段。但是,我不断遇到以下错误:

BadKeyError:无效的字符串键ahVkZXZ-DG9REW8TYW1WAG9YYS0ZNZLYIGSSF9FQMXVYLVBG9HZFNLC3NPB25FXXIAGICKCQW/

以下是我的部分代码: models.py

views.py

我做错了什么


以下是FileField方法:

models.py

views.py


但是我仍然会遇到同样的错误。

使用blobstore有点麻烦。官方的方法是使用文件字段

请参见此处的django Norel文档:


它应该比你正在做的要干净得多。

我已经根据他们的文档编辑了使用FileTransfer的代码,但是我仍然得到了相同的错误。请仔细观察我为FileField方法发布的答案,显示整个视图处理程序和堆栈跟踪。我帮不了你,你只会说些小花絮,却不知道出了什么问题。
name = models.CharField(max_length=200)
cv = blobstore.BlobReferenceProperty()
def get_uploads(request, field_name=None, populate_post=False):
"""Get uploads sent to this handler.
    Args:
    field_name: Only select uploads that were sent as a specific field.
    populate_post: Add the non blob fields to request.POST
    Returns:
      A list of BlobInfo records corresponding to each upload.
      Empty list if there are no blob-info records for field_name.
    """
    if hasattr(request,'__uploads') == False:
    request.META['wsgi.input'].seek(0)
    fields = cgi.FieldStorage(request.META['wsgi.input'], environ=request.META)

        request.__uploads = {}
        if populate_post:
            request.POST = {}

        for key in fields.keys():
            field = fields[key]
            if isinstance(field, cgi.FieldStorage) and 'blob-key' in field.type_options:
                request.__uploads.setdefault(key, []).append(blobstore.parse_blob_info(field))
            elif populate_post:
                request.POST[key] = field.value
    if field_name:
        try:
            return list(request.__uploads[field_name])
        except KeyError:
            return []
    else:
        results = []
        for uploads in request.__uploads.itervalues():
            results += uploads
         return results

@csrf_exempt
def apply(request, posting_id):
    title = "Application"
    form = None
    if request.method == "POST":
        cv_blobs = get_uploads(request, field_name="cv", populate_post=True)
        form = ApplicationForm(request.POST)
        if form.is_valid() and len(blob_info) == 1:
             post = Posting.objects.get(id=posting_id)
            saves = Candidate(post=post, name=form.cleaned_data['name'], email=form.cleaned_data['email'], years_of_experience=form.cleaned_data['years_of_experience']\
            , skillset=form.cleaned_data['skillset'], academics=form.cleaned_data['academics'], number=form.cleaned_data['number']\
            , cover_letter=form.cleaned_data['cover_letter'], cv=cv_blobs[0])
            saves.put()
            return HttpResponseRedirect("/")
        if len(cv_blobs) == 0:
            request.session['upload_error'] = "cv is required"
        form = ApplicationForm(request.POST)
    if form is None: form = ApplicationForm()
    upload_url = blobstore.create_upload_url('/apply/%s' %posting_id)
    params = {
    'upload_url': blobstore.create_upload_url('/apply/%s/' %posting_id),
    'form': form,
    'upload_error': request.session.pop('upload_error', None)
    }    
    return render_to_response("application.html", locals(), context_instance=RequestContext(request))
cv = models.FileField(upload_to='uploads/')
view_url = '/apply/%s' %post_id
if request.method == "POST":
    form = ApplicationForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect("/")

if form is None:
    upload_url, upload_data = prepare_upload(request, view_url)
    kwargs = {}
    kwargs['posting'] = post
    form = ApplicationForm(**kwargs)