我正在烧瓶中建立CMS,并且已经使用execcommands创建了一个简单的所见即所得编辑器,用于创建和编辑帖子,并且一切正常。对于insertImage命令,我使用输入元素打开目录并选择图像。它可以正常工作,当然它会打开我的计算机默认文件夹。我希望它打开用户目录存储在flask中的静态目录中的uploads文件夹。怎么样?
我已经搜索了Flask文档,Python处理文件文档,对此没有提及。这是我正在上课的项目。我超越了这个项目的要求,但这就是我保持事情有趣的方式。我的意思是应该是CMS对。嗯,CMS总是有所见即所得的,它们可以打开默认的“上载”文件夹以插入媒体。另外,在创建上传功能时,我发现在上传文件时flask需要绝对路径。但是为他们提供服务时,相对路径是必要的。 朝正确方向的任何观点将不胜感激。谢谢。
这是结构
<div class="col-md-1 tools">
<a href="#" data-command='insertImage'data-toggle="tooltip" title="Insert Media"><i class='material-icons'>add_photo_alternate</i>
</a>
<div class="editorInputs">
<input type="file" name="media" id="insertImage"
accept="audio/*,video/*,image/*"/>
</div>
</div>
这是我的js脚本
$('.tools a').mousedown(function(e){
let command = $(this).data('command');
if(command == 'insertImage'){
$(this).next().children('input').trigger('click');
let input = $(this).next().children();
input.on('change', function(e){
let val = $(input).val();
document.execCommand(command, false, val);
})
}
});
这是在烧瓶中配置我的上传文件的方式
app.config['SITE_UPLOADS'] = 'D:/Courses/Development/Programming/Python/LaunchCode/LC101/unit2/build-a-blog/static/site/uploads/'
app.config['ADMIN_UPLOADS'] = 'D:/Courses/Development/Programming/Python/LaunchCode/LC101/unit2/build-a-blog/static/admin/uploads/'
app.config['ALLOWED_IMAGE_EXTENSIONS'] = ['PNG', 'JPG', 'JPEG', 'SVG', 'GIF']
app.config['DATA_FILES'] = 'D:/Courses/Development/Programming/Python/LaunchCode/LC101/unit2/build-a-blog/data/'
app.config['RELATIVE_PATH_SITE'] = '../static/site/uploads/'
app.config['RELATIVE_PATH_ADMIN'] = '/static/admin/uploads/'
答案 0 :(得分:0)
因此,我意识到我必须创建一个函数来从上载文件夹中提取图像,显示它们,获取它们的URL并将其传递给execcommand。而我做到了。
首先,使用单选按钮创建图库结构以查看文件。然后,在单击execccomand insertImage链接时,将画廊置于自举程序模式下触发。抓取选中图像的URL。将其传递给我的js中的execcomand函数。
在烧瓶一侧,使用os.listdir(absolute / path / to / directory)获取上载目录中所有文件的列表,并返回文件的python列表。接下来,通过遍历列表中的文件名并将相对路径添加到文件名中,创建文件url并将信息放入字典中。将字典传递到jinja2模板并填充图库。
最后,执行js。
这是我的python代码和js代码。
def get_uploads():
list_images = os.listdir(app.config['ADMIN_UPLOADS'])
images = []
i =0
length = len(list_images)
while i < length:
img = {}
img['name'] = list_images[i]
img['url'] = os.path.join(app.config['RELATIVE_PATH_ADMIN'], list_images[i])
images.append(img)
i+=1
return images
这是我的js。
if(command == 'insertImage'){
$("#uploadsGallery").modal();
$('.ftco-animate').addClass('fadeInUp ftco-animated')
let check = $(this).next().find('input.form-check-input');
let val;
check.on('change', function(e){
val = $(this).val();
});
$('#insertImg').click(function (e) {
r.setStart(editDiv, lastCaretPos);
r.setEnd(editDiv, lastCaretPos);
s.removeAllRanges();
s.addRange(r);
document.execCommand(command, false, val);
check.prop('checked', false);
});
}