def upload(request):#ajax upload file to a question or answer class FileTypeNotAllow(Exception): pass class FileSizeNotAllow(Exception): pass class UploadPermissionNotAuthorized(Exception): pass #<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result> xml_template = "<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result>" try: f = request.FILES['file-upload'] # check upload permission if not auth.can_upload_files(request.user): raise UploadPermissionNotAuthorized # check file type file_name_suffix = os.path.splitext(f.name)[1].lower() if not file_name_suffix in settings.ALLOW_FILE_TYPES: raise FileTypeNotAllow # generate new file name import uuid new_file_name = str(uuid.uuid4()) + file_name_suffix full_file_name = os.path.join(settings.SITE_SRC_ROOT, 'forum/upfiles', new_file_name) #new_file_name = str(time.time()).replace('.', str(random.randint(0,100000))) + file_name_suffix # use default storage to store file default_storage.save(new_file_name, f) # check file size # byte size = default_storage.size(new_file_name) if size > settings.ALLOW_MAX_FILE_SIZE: default_storage.delete(new_file_name) raise FileSizeNotAllow result = xml_template % ('Good', '', settings.MEDIA_URL + '/' + new_file_name) #except UploadPermissionNotAuthorized: # result = xml_template % ('', _('uploading images is limited to users with >60 reputation points'), '') #except FileTypeNotAllow: # result = xml_template % ('', _("allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"), '') #except FileSizeNotAllow: # result = xml_template % ('', _("maximum upload file size is %sK") % settings.ALLOW_MAX_FILE_SIZE / 1024, '') except Exception, e: logging.log(1, str(e)) result = xml_template % ('', _('Error uploading file. Please contact the site administrator. Thank you. %s' % Exception), '')
def upload(request):#ajax upload file to a question or answer class FileTypeNotAllow(Exception): pass class FileSizeNotAllow(Exception): pass class UploadPermissionNotAuthorized(Exception): pass #<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result> xml_template = "<result><msg><![CDATA[%s]]></msg><error><![CDATA[%s]]></error><file_url>%s</file_url></result>" try: f = request.FILES['file-upload'] # check upload permission if not auth.can_upload_files(request.user): raise UploadPermissionNotAuthorized # check file type file_name_suffix = os.path.splitext(f.name)[1].lower() if not file_name_suffix in ('.jpg', '.jpeg', '.gif', '.png', '.bmp', '.tiff'): raise FileTypeNotAllow storage = FileSystemStorage(str(settings.UPFILES_FOLDER), str(settings.UPFILES_ALIAS)) new_file_name = storage.save(f.name, f) # check file size # byte size = storage.size(new_file_name) if size > float(settings.ALLOW_MAX_FILE_SIZE) * 1024 * 1024: storage.delete(new_file_name) raise FileSizeNotAllow result = xml_template % ('Good', '', str(settings.UPFILES_ALIAS) + new_file_name) except UploadPermissionNotAuthorized: result = xml_template % ('', _('uploading images is limited to users with >60 reputation points'), '') except FileTypeNotAllow: result = xml_template % ('', _("allowed file types are 'jpg', 'jpeg', 'gif', 'bmp', 'png', 'tiff'"), '') except FileSizeNotAllow: result = xml_template % ('', _("maximum upload file size is %sM") % settings.ALLOW_MAX_FILE_SIZE, '') except Exception, e: result = xml_template % ('', _('Error uploading file. Please contact the site administrator. Thank you. %s' % e), '')