在将其存储在delphi中之前检查图像大小

时间:2018-04-12 18:38:16

标签: delphi

如何在将图像大小存储到数据库之前检查图像大小。我需要在用户上传图像之前检查图像大小,以避免无法写入数据库的错误。

下面是我如何插入当前在我的数据库中的图像,它工作正常,除了大于我将其存储在数据库中的字段大小的图像。

数据库中的图像字段为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;

2 个答案:

答案 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);