2014-12-10 117 views
0

我玩弄文件上傳在Django但是我得到這個錯誤:強迫與文件上傳UNICODE在Django

Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Users/bli1/Development/Django/TrinityTaaS/parser/views.py" in handle_uploaded_file 
    35.  f = open(log_file, "r") 

Exception Type: TypeError at /parser/events/ 
Exception Value: coercing to Unicode: need string or buffer, WSGIRequest found 

我不知道如何解決這個問題。

views.py

def handle_uploaded_file(log_file): 
    print "HI" 
    json_beacons = [] 
    f = open(log_file, "r") 
    # log regex for events 
    beacon1 = re.compile(r'.*\[DataCapture\]\s+(?P<beacon_var>\[(.*)\])') 
    beacon2 = re.compile(r'.*\[DataCapture\]\s+Event:\s+\{.*\}(?P<beacon_var>\{.*\})') 
    for chunk in f.chunk(): 
     log_entry = re.search(beacon1, chunk) 
     if log_entry: 
      beacon_json = log_entry.group("beacon_var") 
      json_beacons.append(beacon_json[1:-1]) 
    return json_beacons 

def upload_file(request): 
    if request.method == "POST": 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      json_beacons = handle_uploaded_file(request.FILES['file']) 
      return HttpResponseRedirect('/success/') 
    else: 
     form = UploadFileForm() 
    return render_to_response('upload.html', {'form': form}) 

forms.py

class UploadFileForm(forms.Form): 
    title = forms.CharField(max_length=50) 
    file = forms.FileField() 

回答

1

由於錯誤推斷log_file是響應對象,我的猜測是,你實際上是在你的URL配置參考handle_uploaded_file而比upload_file

+0

*嘆*這是一個漫長的一天...... – Liondancer 2014-12-10 21:55:28

1

除了可能不正確的URL配置SmileyChris提到,open預計包含到一個文件路徑的字符串,而request.FILES包含代表文件對象作爲記錄在這裏:https://docs.djangoproject.com/en/dev/ref/files/uploads/#uploaded-files

你不需要open的上傳的文件,只需使用其readchunks方法來獲取上傳的內容。

+0

謝謝你的提示!非常感激! – Liondancer 2014-12-10 21:59:02