从 SQLite 检索图像,“无效或不支持的图像格式”
Retrieving image from SQLite, “Invalid or Unsupported Image Format”
我正在使用 Cloud9 IDE,当我打开在 SQLite 中存储和检索的图像时,我得到一个 "Invalid or Unsupported Image Format"
。当我将 convertToBinaryData
文件输入到 writeTofile
函数时,会检索到照片,所以这肯定与 SQL 有关。
有人可以协助正确格式化吗?
def convertToBinaryData(filename):
#Convert digital data to binary format
with open(path, 'rb') as file:
blobData = file.read()
return blobData
def writeTofile(data, filename):
# Convert binary data to proper format and write it on Hard Disk
with open(filename, 'wb') as file:
advert = file.write(data)
@app.route("/place", methods=["GET", "POST"])
@login_required
def place():
if request.method == "GET":
return render_template("place.html")
if request.method == "POST":
我已经尝试了以下四个选项并且 none 有效。
'''Version 1'''
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (str(row[0]))
writeTofile(row[0], "dan.jpg")
错误:file.write(数据)
类型错误:需要类似字节的对象,而不是 'dict'
'''Version 2'''
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (row[0])
writeTofile(row[0], "dan.jpg")
错误:file.write(数据)
类型错误:需要类似字节的对象,而不是 'dict'
'''Version 3'''
placing = "INSERT INTO food (UID, category, title, description, shipping, photo, county, area, post_time) VALUES (?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (str(row[0]))
mystring = str(row[0])
b = mystring.encode('utf-8')
writeTofile(b, "dan.jpg")
错误:没有错误,但创建的 JPEG 是 "Invalid or Unsupported Image Format"
'''Version 4'''
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
# Convert data into tuple format
data_tuple = (request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"])
cursor.execute(placing, data_tuple)
sqliteConnection.commit()
print("Image and file inserted successfully as a BLOB into a table")
cursor.execute("SELECT photo from food")
record = cursor.fetchone()
writeTofile(record, "dan.jpg")
cursor.close()
错误:TypeError:需要类似字节的对象,而不是 'tuple'
好吧,在写出我所有的错误然后尝试完全不同的东西后,我终于弄明白了。感谢您的共鸣板。
def place():
"""place an ad"""
if request.method == "GET":
return render_template("place.html")
if request.method == "POST":
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, uid) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
# Convert data into tuple format
data_tuple = ((request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"]))
cursor.execute(placing, data_tuple)
sqliteConnection.commit()
print("Image and file inserted successfully as a BLOB into a table")
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
query = cursor.execute("SELECT * FROM food ORDER BY post_time DESC LIMIT 1")
for row in query:
pic = row[4]
writeTofile(pic, "dan.jpg")
sqliteConnection.commit()
cursor.close()
return render_template("placed.html")
我正在使用 Cloud9 IDE,当我打开在 SQLite 中存储和检索的图像时,我得到一个 "Invalid or Unsupported Image Format"
。当我将 convertToBinaryData
文件输入到 writeTofile
函数时,会检索到照片,所以这肯定与 SQL 有关。
有人可以协助正确格式化吗?
def convertToBinaryData(filename):
#Convert digital data to binary format
with open(path, 'rb') as file:
blobData = file.read()
return blobData
def writeTofile(data, filename):
# Convert binary data to proper format and write it on Hard Disk
with open(filename, 'wb') as file:
advert = file.write(data)
@app.route("/place", methods=["GET", "POST"])
@login_required
def place():
if request.method == "GET":
return render_template("place.html")
if request.method == "POST":
我已经尝试了以下四个选项并且 none 有效。
'''Version 1'''
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (str(row[0]))
writeTofile(row[0], "dan.jpg")
错误:file.write(数据) 类型错误:需要类似字节的对象,而不是 'dict'
'''Version 2'''
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (row[0])
writeTofile(row[0], "dan.jpg")
错误:file.write(数据) 类型错误:需要类似字节的对象,而不是 'dict'
'''Version 3'''
placing = "INSERT INTO food (UID, category, title, description, shipping, photo, county, area, post_time) VALUES (?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)"
ad_photo = convertToBinaryData(request.form.get("photo"))
db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))
row = db.execute('SELECT photo FROM food')
print (str(row[0]))
mystring = str(row[0])
b = mystring.encode('utf-8')
writeTofile(b, "dan.jpg")
错误:没有错误,但创建的 JPEG 是 "Invalid or Unsupported Image Format"
'''Version 4'''
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
# Convert data into tuple format
data_tuple = (request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"])
cursor.execute(placing, data_tuple)
sqliteConnection.commit()
print("Image and file inserted successfully as a BLOB into a table")
cursor.execute("SELECT photo from food")
record = cursor.fetchone()
writeTofile(record, "dan.jpg")
cursor.close()
错误:TypeError:需要类似字节的对象,而不是 'tuple'
好吧,在写出我所有的错误然后尝试完全不同的东西后,我终于弄明白了。感谢您的共鸣板。
def place():
"""place an ad"""
if request.method == "GET":
return render_template("place.html")
if request.method == "POST":
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, uid) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
ad_photo = convertToBinaryData(request.form.get("photo"))
# Convert data into tuple format
data_tuple = ((request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"]))
cursor.execute(placing, data_tuple)
sqliteConnection.commit()
print("Image and file inserted successfully as a BLOB into a table")
sqliteConnection = sqlite3.connect('finance.db')
cursor = sqliteConnection.cursor()
query = cursor.execute("SELECT * FROM food ORDER BY post_time DESC LIMIT 1")
for row in query:
pic = row[4]
writeTofile(pic, "dan.jpg")
sqliteConnection.commit()
cursor.close()
return render_template("placed.html")