我有一个网页,用户可以在其中上传PDF文件,并使用AJAX将其发送到我的Flask应用程序。这是ajax代码:
var formData = new FormData();
formData.append('attachment', document.getElementById("attachment").files[0]);
$.ajax({
type: 'POST',
url: 'process_award_storage',
contentType: false,
processData: false,
data: formData
})
我认为这没有任何问题,因为我可以在python代码中打印出文件的内容和标题。然后,我的烧瓶模型就这样定义了,使用LargeBinary作为PDF附件:
class AwardStore(db.Model):
__tablename__ = 'awards_store'
id = db.Column(db.Integer, primary_key=True)
...
file = db.Column(db.LargeBinary, nullable=True) #I am sure this is the right file type for PDF saving
最后,这是将AJAX文件保存到数据库的方式:
award = AwardStore(name=name, file=request.files['attachment'].read())
db.session.add(award)
db.session.commit()
我可以使用MySQL Workbench看到它已保存。但是,当我尝试从那里将BLOB下载到桌面并打开它时,它显示“无法加载PDF文档”。当我使用烧瓶的send_file
时,也会发生同样的情况。好像我在网上看到的一样,做了所有事情,但是出了点问题。
这些警告是否相关?:
C:\Users\msolonko\Desktop\NICKFI~1\CACHTM~1\APP_DE~1\virt\lib\site-packages\pymysql\cursors.py:170: Warning: (1300, "Invalid utf8 character string: 'C4E5F2'")
result = self._query(query)
C:\Users\msolonko\Desktop\NICKFI~1\CACHTM~1\APP_DE~1\virt\lib\site-packages\pymysql\cursors.py:170: Warning: (1265, "Data truncated for column 'file' at row 1")
result = self._query(query)
我尝试使用Google搜索,但没有找到任何东西。感谢您的协助。
编辑:
我注意到通常会正确上传和显示小文件。问题在于文件大小>〜50kB。我正在使用AWS RDS的数据库,是否可以更改某个设置以启用更大的大小?
答案 0 :(得分:1)
LargeBinary也接受长度字段。 它将转换为mysql的BLOB,其默认长度为65535字节(64kb)。 尝试增加长度并将其设置为
一个MEDIUMBLOB,用于16777215字节(16 MB)
一个LONGBLOB,用于4294967295字节(4 GB)。
希望这会有所帮助