3 from django.core.files.uploadedfile import UploadedFile
4 from django.core.files.uploadhandler import FileUploadHandler, StopUpload, StopFutureHandlers
6 from filex.forms import HostPathForm
7 from filex.ftp import FTPOperation
10 class FtpUploadHandler(FileUploadHandler):
15 def new_file(self, file_name, *args, **kwargs):
16 super(FtpUploadHandler, self).new_file(file_name, *args, **kwargs)
18 form = HostPathForm(self.request.GET)
20 if self.request.user.is_anonymous() or not form.is_valid():
21 raise StopUpload(connection_reset=True)
24 self.ftp = FTPOperation(self.request.session['proxy'], self.chunk_size)
26 self.url = 'gsiftp://{}/{}'.format(form.cleaned_data['host'],
27 os.path.join(form.cleaned_data['path'], self.file_name))
28 self.tmp_url = self.url + '.part'
30 self.ftp.put(self.tmp_url)
34 def receive_data_chunk(self, raw_data, start):
35 self.ftp.stream.put(raw_data)
37 def file_complete(self, file_size):
38 # signal end of data and wait for finish
39 self.ftp.stream.put(None)
42 self.ftp.move(self.tmp_url, self.url)
44 return UploadedFile(name=self.file_name, size=file_size, charset=self.charset,
45 content_type=self.content_type, content_type_extra=self.content_type_extra)