首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-07-04 
大家觉得,存储用户的头像该如何存?public partial class Form1: Form {#region 多次用到成员变量.private

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

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 就存到数据库里吧。

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

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

热点排行