def store(self, media_file, file=None, url=None, meta=None): """Store the given file or URL and return a unique identifier for it. :type media_file: :class:`~mediacore.model.media.MediaFile` :param media_file: The associated media file object. :type file: :class:`cgi.FieldStorage` or None :param file: A freshly uploaded file object. :type url: unicode or None :param url: A remote URL string. :type meta: dict :param meta: The metadata returned by :meth:`parse`. :rtype: unicode or None :returns: The unique ID string. Return None if not generating it here. """ file_name = safe_file_name(media_file, file.filename) file_path = self._get_path(file_name) temp_file = file.file temp_file.seek(0) permanent_file = open(file_path, 'wb') copyfileobj(temp_file, permanent_file) temp_file.close() permanent_file.close() return file_name
def store(self, media_file, file=None, url=None, meta=None): """Store the given file or URL and return a unique identifier for it. :type media_file: :class:`~mediacore.model.media.MediaFile` :param media_file: The associated media file object. :type file: :class:`cgi.FieldStorage` or None :param file: A freshly uploaded file object. :type url: unicode or None :param url: A remote URL string. :type meta: dict :param meta: The metadata returned by :meth:`parse`. :rtype: unicode or None :returns: The unique ID string. Return None if not generating it here. :raises FTPUploadError: If storing the file fails. """ file_name = safe_file_name(media_file, file.filename) file_url = os.path.join(self._data[HTTP_DOWNLOAD_URI], file_name) upload_dir = self._data[FTP_UPLOAD_DIR] stor_cmd = 'STOR ' + file_name ftp = self._connect() try: if upload_dir: ftp.cwd(upload_dir) ftp.storbinary(stor_cmd, file.file) # Raise a FTPUploadError if the file integrity check fails # TODO: Delete the file if the integrity check fails self._verify_upload_integrity(file.file, file_url) ftp.quit() except ftp_errors, e: log.exception(e) ftp.quit() msg = _('Could not upload the file from your FTP server: %s')\ % e.message raise FTPUploadError(msg, None, None)