读书人

大家觉得,存储用户的头像该怎么存

发布时间: 2013-07-04 11:45:28 作者: rapoo

大家觉得,存储用户的头像该如何存?

public partial class Form1: Form {
#region 多次用到成员变量.
private DataSet set = new DataSet(); //存储Adapter读取的数据集.
private SqlDataAdapter adapter;
private string strConnction = @"Data Source=.\SQLExpress;Initial Catalog=DB_User;Persist Security Info=True;User ID=sa;Password=**********";
#endregion

public Form1() {
InitializeComponent();
}
//选择用户头像.
private void btnSelectImg_Click(object sender, EventArgs e) {
openFD.Filter = "(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";//图像过滤.
if(openFD.ShowDialog() == DialogResult.OK) picBox.Image = Image.FromFile(openFD.FileName);
}
//添加用户方法.
bool AddUser(string strName, string strPicture) {
using(SqlConnection connect = new SqlConnection(strConnction)) {
using(FileStream fs = new FileStream(strPicture, FileMode.Open, FileAccess.Read)) {
using(BinaryReader bReader = new BinaryReader(fs)) { //二进制读取图像.
byte[] bytes = bReader.ReadBytes((int)fs.Length);
SqlCommand cmd = connect.CreateCommand();
cmd.CommandText = "insert into [dbo].[T_User](FName,FPhoto) values(@name,@photo)";


cmd.Parameters.Clear(); //清空先前参数变量.
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtUserName.Text;
cmd.Parameters.Add("@photo", SqlDbType.Image).Value = bytes;
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User"); //填充T_User表.
}
}
}
return true;
}
//添加新用户.
private void btnAddUser_Click(object sender, EventArgs e) {
if(!string.IsNullOrEmpty(txtUserName.Text) && picBox.Image != null) {
if(AddUser(txtUserName.Text.Trim(), openFD.FileName)) {
MessageBox.Show("用户添加成功");
}
else
MessageBox.Show("用户添加失败");
}
}
//显示用户信息.
void ShowUser() {
using(SqlConnection conect = new SqlConnection(strConnction)) {
SqlCommand cmd = conect.CreateCommand();


cmd.CommandText = "select [FName] as 姓名,[FPhoto] as 头像 from [dbo].[T_User]";
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User");
dataGV.DataSource = set.Tables["T_User"]; //指定数据源.
}
}
//初始时加载用户.
private void Form1_Load(object sender, EventArgs e) {
ShowUser();
}
}


/*以上是我看了一个例子之后写的,按照他的思路,写的很顺...但是我突然想到之前写Web的时候,用户的图片之类的,数据库只是保存了图片的路径,而不是以二进制存储在上面DataSet中,所以我感觉我这个做的,是不是真的没有意义.图片占的内存很大.用户肯定不会是一两个...大家觉得呢...*/

[解决办法]
以二进制格式存在数据库中,或者以图片文件存在文件系统里面都可以。
[解决办法]
引用:
以二进制格式存在数据库中,或者以图片文件存在文件系统里面都可以。

+1
用image存数据库!
[解决办法]
2楼caozhy版主说的很对
或者我觉得可以把图片路径保存到数据库中 读取图片路径打开图片 前提是你本机要有这些图片 所以可能没有2楼版主的方法好
[解决办法]
图片存数据库会不会影响性能,数据库会不会撑的难受崩溃?
[解决办法]
头像,数据量应该不会很大
[解决办法]
没有看你的代码。我觉得也不重要。

这个东西的出发点,如果让我看来,不管你用什么保存,都要抛开它(假设它只是一个url资源引用而已)而从整体去考虑。例如你是否需要将这类资源统一地移植到别的服务器上?你是否需要要求其下载机制支持http 304状态?等等。

当你有更多东西可以考虑,当你考虑持续发布、持续重构架构的工程技术,你就放弃了一些暂时的纠结。根据开发的人来安排技术,而不是根据技术来安排开发的人。
------解决方案--------------------


引用:
没有看你的代码。我觉得也不重要。

这个东西的出发点,如果让我看来,不管你用什么保存,都要抛开它(假设它只是一个url资源引用而已)而从整体去考虑。例如你是否需要将这类资源统一地移植到别的服务器上?你是否需要要求其下载机制支持http 304状态?等等。

当你有更多东西可以考虑,当你考虑持续发布、持续重构架构的工程技术,你就放弃了一些暂时的纠结。根据开发的人来安排技术,而不是根据技术来安排开发的人。


大神回答,看不懂。。
[解决办法]
同意二楼的意见,目前主要就是这两种方法。存数据库和放文件系统数据库存路径的方式各有利弊,我在实际项目中都有使用过,二进制存数据库这种方式确实很耗费数据库空间,但是便于管理,安全性较高。
[解决办法]
你是winform 就存到数据库里吧。

[解决办法]
如果像实名认证的身份证图片之类的东西,则需要转换为二进制存到数据库。

记得加上水印。
[解决办法]
建议储存在文件系统中,用户登陆后头像显示引用方便。

读书人网 >C#

热点推荐