mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-11-04 01:03:02 +00:00 
			
		
		
		
	Handle no write permission to tmp folder (#1060)
This commit is contained in:
		@@ -550,13 +550,19 @@ def upload():
 | 
			
		||||
                    flash(
 | 
			
		||||
                        _("File extension '%(ext)s' is not allowed to be uploaded to this server",
 | 
			
		||||
                          ext=file_ext), category="error")
 | 
			
		||||
                    return redirect(url_for('web.index'))
 | 
			
		||||
                    return Response(json.dumps({"location": url_for("web.index")}), mimetype='application/json')
 | 
			
		||||
            else:
 | 
			
		||||
                flash(_('File to be uploaded must have an extension'), category="error")
 | 
			
		||||
                return redirect(url_for('web.index'))
 | 
			
		||||
                return Response(json.dumps({"location": url_for("web.index")}), mimetype='application/json')
 | 
			
		||||
 | 
			
		||||
            # extract metadata from file
 | 
			
		||||
            meta = uploader.upload(requested_file)
 | 
			
		||||
            try:
 | 
			
		||||
                meta = uploader.upload(requested_file)
 | 
			
		||||
            except (IOError, OSError):
 | 
			
		||||
                log.error("File %s could not saved to temp dir", requested_file.filename)
 | 
			
		||||
                flash(_(u"File %(filename)s could not saved to temp dir",
 | 
			
		||||
                        filename= requested_file.filename), category="error")
 | 
			
		||||
                return Response(json.dumps({"location": url_for("web.index")}), mimetype='application/json')
 | 
			
		||||
            title = meta.title
 | 
			
		||||
            authr = meta.author
 | 
			
		||||
            tags = meta.tags
 | 
			
		||||
@@ -570,7 +576,8 @@ def upload():
 | 
			
		||||
            if title != u'Unknown' and authr != u'Unknown':
 | 
			
		||||
                entry = helper.check_exists_book(authr, title)
 | 
			
		||||
                if entry:
 | 
			
		||||
                    book_html = flash(_(u"Uploaded book probably exists in the library, consider to change before upload new: ")
 | 
			
		||||
                    log.info("Uploaded book probably exists in library")
 | 
			
		||||
                    flash(_(u"Uploaded book probably exists in the library, consider to change before upload new: ")
 | 
			
		||||
                        + Markup(render_title_template('book_exists_flash.html', entry=entry)), category="warning")
 | 
			
		||||
 | 
			
		||||
            # check if file path exists, otherwise create it, copy file to calibre path and delete temp file
 | 
			
		||||
@@ -578,16 +585,19 @@ def upload():
 | 
			
		||||
                try:
 | 
			
		||||
                    os.makedirs(filepath)
 | 
			
		||||
                except OSError:
 | 
			
		||||
                    log.error("Failed to create path %s (Permission denied)", filepath)
 | 
			
		||||
                    flash(_(u"Failed to create path %(path)s (Permission denied).", path=filepath), category="error")
 | 
			
		||||
                    return redirect(url_for('web.index'))
 | 
			
		||||
                    return Response(json.dumps({"location": url_for("web.index")}), mimetype='application/json')
 | 
			
		||||
            try:
 | 
			
		||||
                copyfile(meta.file_path, saved_filename)
 | 
			
		||||
            except OSError:
 | 
			
		||||
                log.error("Failed to store file %s (Permission denied)", saved_filename)
 | 
			
		||||
                flash(_(u"Failed to store file %(file)s (Permission denied).", file=saved_filename), category="error")
 | 
			
		||||
                return redirect(url_for('web.index'))
 | 
			
		||||
                return Response(json.dumps({"location": url_for("web.index")}), mimetype='application/json')
 | 
			
		||||
            try:
 | 
			
		||||
                os.unlink(meta.file_path)
 | 
			
		||||
            except OSError:
 | 
			
		||||
                log.error("Failed to delete file %(file)s (Permission denied)", meta.file_path)
 | 
			
		||||
                flash(_(u"Failed to delete file %(file)s (Permission denied).", file= meta.file_path),
 | 
			
		||||
                      category="warning")
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -195,12 +195,12 @@ def upload(uploadfile):
 | 
			
		||||
 | 
			
		||||
    if not os.path.isdir(tmp_dir):
 | 
			
		||||
        os.mkdir(tmp_dir)
 | 
			
		||||
 | 
			
		||||
    filename = uploadfile.filename
 | 
			
		||||
    filename_root, file_extension = os.path.splitext(filename)
 | 
			
		||||
    md5 = hashlib.md5()
 | 
			
		||||
    md5.update(filename.encode('utf-8'))
 | 
			
		||||
    tmp_file_path = os.path.join(tmp_dir, md5.hexdigest())
 | 
			
		||||
    log.debug("Temporary file: %s", tmp_file_path)
 | 
			
		||||
    uploadfile.save(tmp_file_path)
 | 
			
		||||
    meta = process(tmp_file_path, filename_root, file_extension)
 | 
			
		||||
    return meta
 | 
			
		||||
 
 | 
			
		||||
@@ -437,19 +437,15 @@ class WorkerThread(threading.Thread):
 | 
			
		||||
        if self.last >= 20:
 | 
			
		||||
            self._delete_completed_tasks()
 | 
			
		||||
        # progress=100%, runtime=0, and status finished
 | 
			
		||||
        log.info("Last " + str(self.last))
 | 
			
		||||
        log.info("Current " + str(self.current))
 | 
			
		||||
        log.info("id" + str(self.id))
 | 
			
		||||
        for i in range(0, len(self.queue)):
 | 
			
		||||
            message = '%s:%s' % (i, self.queue[i].items())
 | 
			
		||||
            log.info(message)
 | 
			
		||||
        log.debug("Last " + str(self.last))
 | 
			
		||||
        log.debug("Current " + str(self.current))
 | 
			
		||||
        log.debug("id" + str(self.id))
 | 
			
		||||
 | 
			
		||||
        self.id += 1
 | 
			
		||||
        starttime = datetime.now()
 | 
			
		||||
        self.queue.append({'starttime': starttime, 'taskType': TASK_UPLOAD})
 | 
			
		||||
        self.UIqueue.append({'user': user_name, 'formStarttime': starttime, 'progress': "100 %", 'taskMess': taskMessage,
 | 
			
		||||
                             'runtime': '0 s', 'stat': STAT_FINISH_SUCCESS,'id': self.id, 'taskType': TASK_UPLOAD})
 | 
			
		||||
        # self.UIqueue[self.current]['formStarttime'] = self.queue[self.current]['starttime']
 | 
			
		||||
        self.last=len(self.queue)
 | 
			
		||||
        self.doLock.release()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user