delphi 上传和下载用户头像(ACCESS数据库)
1.数据表设计:
要点:
- [用户头像]字段选择 OLE对象
- [用户头像]不要直接在数据库中插入对象,因为会被套壳(如下图所示),程序要想再读出来很困难
- 理论上应该由程序上传到数据库,而不是直接在数据库里添加

直接插入会被加壳

下面这种才对正确的数据格式

程序界面设计:
- 给用户设置一个默认的头像(如下图的螃蟹)
- 设置一个方法,用来把用户头像从数据库中取回,然后显示到图片控件中
- 设置一个方法,用来把用户的信息更新到数据库,包括头像.

实现下载并替换用户头像功能:
procedure TEditChangePW.SetUserImg; begin var png:=TPngImage.Create; var blobField := FDQuery1.FieldByName('用户头像') as TBlobField; // 检查是否有头像数据 if blobField.IsNull or (blobField.BlobSize = 0) then Exit; // 创建内存流 var stream := TMemoryStream.Create; try // 将数据库中的图片数据保存到流 blobField.SaveToStream(stream); stream.Position := 0; png.LoadFromStream(stream);//将内存流转成PNG图片 scGPImage1.PngImage:=png; //替换用户头像 finally stream.Free; png.free; end; end;
实现更新数据,上传图片等功能
FDQuery1.edit; //FDQuery1.FieldByName('密码').Value := Trim(newpw.Text); //打包图片 var stream := TMemoryStream.Create; var png := scGPImage1.PngImage; var blobField := FDQuery1.FieldByName('用户头像') as TBlobField; //强制转换 try png.SaveToStream(stream); //将图片保存为内存流 stream.Position := 0; blobField.LoadFromStream(stream); FDQuery1.post; UWPInfoMessage('提示', '信息已保存!'); ModalResult := mrOk; finally stream.free; end;
圆形头像可以参考这个链接

浙公网安备 33010602011771号