如何将png文件保存到数据库FLASK中?

雷兹诺夫

我有一个小问题,我要上传已采取一(截图)图像selenium driverPhantomJS我的网站,并把它放到数据库中。

我正在使用该get_screenshot_as_file()功能将图像保存在当前目录中,如果该过程成功完成,则此功能只是给我TrueFalse值,但是我需要的是文件名,以便将其保存在数据库中。

这是我的观点和模型片段:

models.py

class Driver(PhantomJS):
    def __init__(self, *args, **kwargs):
        super(Driver, self).__init__(*args, **kwargs)
        self._log = StderrLog()

class ScreenShot(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    image = db.Column(db.String(255), default=None)
    title = db.Column(db.String(80))
    describe = db.Column(db.Text)

    def __init__(self, image, title, describe):
        self.image = image
        self.title = title
        self.describe = describe

    def __repr__(self):
        return "Title %r" %self.title

views.py

from blog.form import ScreenShotForm
from blog.models import ScreenShot, StderrLog, Driver

@app.route('/my_works/', methods=('GET','POST'))
@only_author
def my_works():
    blog = Blog.query.first()
    form = ScreenShotForm()

    if form.validate_on_submit():

        url = request.args.get(url_for('index'), form.title.data)
        width = int(request.args.get("w", 1200))
        min_height = int(request.args.get("h", 400))
        wait_time = float(request.args.get("t", 20)) / 1000  # ms

        driver = Driver()
        driver.set_window_position(0, 0)
        driver.set_window_size(width, min_height)

        driver.set_page_load_timeout(100)
        driver.implicitly_wait(100)
        driver.get(url)

        driver.set_window_size(width, min_height)
        time.sleep(wait_time)

        sys.stderr.write(driver.execute_script("return document.readyState") + "\n")

        image = driver.get_screenshot_as_file(os.urandom(3).encode('hex')+'.png')

        title = form.title.data
        describe = form.describe.data

        scrshot = ScreenShot(image, title, describe)
        db.session.add(scrshot)
        db.session.commit()
        driver.quit()
        flash('Screenshot added.')
        return redirect(url_for('index'))
        #driver.get_screenshot_as_file('foo.png')
        #return "<h1>Image saved</h1>"
        #return Response(png, mimetype="image/png")
    return render_template('blog/my_works.html', blog=blog, form=form)

表格

class ScreenShotForm(Form):
    title = StringField('Site',[validators.Required(), validators.length(max=80)])
    describe = TextAreaField('Describtion', validators=[validators.Required()])

如您所见,正在使用os.urandom(3).encode('hex')+'.png'它可以给我一个随机的屏幕快照名称,这样我就不会感到困惑,在数据库中我得到1,这意味着True,在我的项目文件夹中,我也25de0a.png完美地获得了屏幕截图文件,听起来不错! !!!,但我不希望这种情况发生,我想获取文件名而不是TrueorFalse表达式。

这是我在数据库中得到的片段:

+----+-------+-------------------------+-------------------+
| id | image | title                   | describe          |
+----+-------+-------------------------+-------------------+
|  6 | 0     | http://www.youtube.com/ | testing testing . |
|  7 | 1     | http://www.youtube.com/ | asdasfasfwf324214 |
+----+-------+-------------------------+-------------------+

我尝试了该get_screenshot_as_png()功能,我得到的是图像的源代码。

如果结果如下,那将是很好的:

+----+-------+-------------------------+-------------------+
| id | image | title                   | describe          |
+----+-------+-------------------------+-------------------+
|  6 | 25de0a.png     | http://www.youtube.com/ | testing testing . |
|  7 | 25de0a.png     | http://www.youtube.com/ | asdasfasfwf324214 |
+----+-------+-------------------------+-------------------+

最终,请任何帮助将吨吨吨赞赏:)。

皮坎宁安

您将所需的文件名传递到get_screenshot_as_file方法中(如您现在所做的那样)。get_screenshot_as_file如果文件已成功写入,则方法返回True,否则返回False。

您的代码应类似于:

image_filename = os.urandom(3).encode('hex')+'.png' 

if driver.get_screenshot_as_file(image_filename):
    # file was successfully written
    title = form.title.data
    describe = form.describe.data

    scrshot = ScreenShot(image_filename, title, describe)
    db.session.add(scrshot)
    db.session.commit()
else:
    # file was not written
    pass

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将PHP会话数据保存到数据库而不是文件系统中?

如何将内存sqlite数据库保存到Perl中的文件?

如何将Scrapy的输出保存到文件或数据库中

如何将数据库中的数据保存到 mvc 应用程序中的文件夹中

如何将PhoneNumberField数据保存到数据库?

如何将数据从tableview保存到数据库?

Portia,如何将数据保存到数据库?

如何将数据保存到应用程序 vb.net 中?(不使用数据库或txt文件)

如何将图像路径/图像保存到数据库中可绘制文件夹中的图像?

单击下载按钮时,如何将 MySQL 数据库中的值保存到 .txt 文件中?

如何将JavaScript变量保存到数据库

Laravel,如何将DomDocument保存到数据库?

如何将python的输出保存到数据库?

如何将输入保存到数据库

如何将数组从 MATLAB 保存到数据库?

如何将Integer保存到数据库(SQLite)

如何将图像保存到数据库?

如何将LinearGradient保存到数据库

如何将日期保存到 SQL 数据库?

如何将URL中的XmL数据保存到数据库中

如何将多个文件保存到数据库而不是磁盘

Nreco.VideoConverter,如何将转换后的文件名保存到数据库?

如何将Ajax中的一行数据保存到数据库?

我如何将数据保存到使用 fetch 创建的数据库中

Yii2 如何将接收到的 JSON 数据保存到数据库中

如何将@Lob数据从春季保存到Postgres数据库中?

我如何将多个数据保存到Firebase实时数据库中

如何将Nokogiri的抓取数据保存到Rails数据库中?

如何将数组索引数据保存到单独行中的数据库?