나는 이것을 3 일 동안 똑바로 작업했으며, 나는 지혜로 끝까지 노력하고있다. 나는이 과정에서 정확히 무엇이 일어나는 지, 그리고 각 단계에서 실제 데이터가 무엇인지 (또는 어떻게 보이는지)를 문자 적으로 단계별로 설명 할 누군가가 필요하다.Django에서 파일 업로드/처리
내부에 ImageField()가있는 모델이 있습니다. 그 모델을 기반으로 한 양식이 있습니다. 양식을 서식 파일로 전달하면 해당 서식 파일은 완성 된 양식 데이터를보기로 전달합니다. 그런 다음 요청을 바인딩합니다. 모델/폼의 인스턴스에 데이터를 저장하고 저장합니다.
내가하고 싶은 일은이 업로드 된 파일을 내 사용자의 프로필 사진으로 사용하고 모델에 저장하기 전에 크기를 조정하고 싶습니다.
데이터를 확인한 후 요청을 전달합니다. 파일 [ 'file'] 데이터를 함수로 가져오고이 함수의 내부에서 PIL이 데이터를 엽니 다. PIL은이 데이터를 InMemory 파일에서 직접 볼 때마다 아무런 문제가 없습니다. 그러나, 나는 편집 된 데이터를 장고가 ImageField()에서 찾고있는 것으로 출력하기 위해 PIL을 얻을 수 없다. 기본적으로이 업로드 된 데이터를 가져 와서 크기를 조정하고 이름을 변경 한 다음 ImageField()를 통해 저장하여 장고가 처리하도록합니다.
뷰 :
if request.method == "POST":
user_form = EditUserProfile(request.POST, instance=User.objects.get(id=request.user.id))
siteprofile_form = EditSiteProfile(request.POST, request.FILES, instance=SiteProfile.objects.get(user=request.user))
if user_form.is_valid() and siteprofile_form.is_valid():
user_form.save()
temp_siteprofile = siteprofile_form.save(commit=False)
temp_siteprofile.profile_image = process_image_string(request.FILES['profile_image'], (100, 100))
temp_siteprofile.save()
return user_profile(request, request.user.username)
기능 :
def process_image_string(f, size):
f_image = Image.open(f)
f_image = f_image.resize(size)
output = StringIO()
f_image.save(output, "JPEG")
return output
(내 눈)이이었다 함수가 지난 3 일 아마 100 번 변경을 명심하시기 바랍니다 내 가장 가까운 성공.
당신이 위의 코드가 발생하는 오류를 제공하시기 바랍니다 수 있을까? – Paulo
'cStringIO.StringO'객체에 '_committed'속성이 없습니다. –