pandora/pandora/archive/chunk.py

52 lines
1.4 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from __future__ import division, with_statement
import os
import ox
from django import forms
class ChunkForm(forms.Form):
chunk = forms.FileField()
chunkId = forms.IntegerField(required=False)
offset = forms.IntegerField(required=False)
done = forms.IntegerField(required=False)
def save_chunk(self, file, chunk, offset, name, done_cb=None):
print 'file', file
print 'chunk', chunk
if not file:
file.name = name
ox.makedirs(os.path.dirname(file.path))
with open(file.path, 'w') as f:
f.write(chunk.read())
self.save()
else:
path = file.path
size = file.size
if offset == None:
offset = size
elif offset > size:
return False, size
with open(path, 'r+') as f:
f.seek(offset)
f.write(chunk.read())
return done_cb() if done_cb else True, file.size
def process_chunk(request, _save_chunk):
response = {
'result': 1,
}
form = ChunkForm(request.POST, request.FILES)
if form.is_valid():
d = form.cleaned_data
ok, _offset = _save_chunk(d['chunk'], d['offset'], d['done'])
response['offset'] = _offset
response['result'] = 1 if ok else -1
if d['done']:
response['done'] = 1
else:
response['result'] = -1
return response