如何在将图像大小存储到数据库之前检查图像大小。我需要在用户上传图像之前检查图像大小,以避免无法写入数据库的错误。
下面是我如何插入当前在我的数据库中的图像,它工作正常,除了大于我将其存储在数据库中的字段大小的图像。
数据库中的图像字段为LONGVARBINARY
484物理长度
dtm.cds.Insert;
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Visible := false;
Field := TBlobField(dtm.cds.FieldByName('PICTURE'));
Stream := dtm.cds.CreateBlobStream(field, bmwrite);
JpegImage := TJPEGImage.Create;
try
JpegImage.Assign(Image1.Picture);
JpegImage.SaveToStream(Stream);
finally
Stream.Free;
dtm.cds.Post;
dtm.cds.ApplyUpdates(-1);
end;
答案 0 :(得分:2)
您可以使用您正在使用的流的Size
属性。当然,您需要知道数据库允许的确切大小。 E.g:
class Node:
rightNode = None
leftNode = None
Value = 0
def __init__(self, value):
self.Value = value
self.rightNode = None
self.leftNode = None
class Employee:
empCount = 0
def __init__(self):
print("testing")
def NodeInsert:
empCount=2
答案 1 :(得分:2)
TField
有一个Size
属性:
指示支持不同大小的数据类型的物理数据库字段定义中使用的大小。
尝试更像这样的事情:
MemStream := TMemoryStream.Create;
try
JpegImage := TJPEGImage.Create;
try
Picture := TPicture.Create;
try
Picture.LoadFromFile(OpenPictureDialog1.FileName);
JpegImage.Assign(Picture.Graphic);
finally
Picture.Free;
end;
JpegImage.SaveToStream(MemStream);
finally
JpegImage.Free;
end;
Field := dtm.cds.FieldByName('PICTURE');
if MemStream.Size > Field.Size then
raise Exception.Create('Image as a JPEG is too large to store!');
dtm.cds.Insert;
try
Stream := dtm.cds.CreateBlobStream(Field, bmWrite);
try
Stream.CopyFrom(MemStream, 0);
finally
Stream.Free;
end;
dtm.cds.Post;
except
dtm.cds.Cancel;
raise;
end;
finally
MemStream.Free;
end;
dtm.cds.ApplyUpdates(-1);