做项目时遇到的几个关于C#和SQL的细节问题(二)

6、js中的中文显示到页面上时,一般都会乱码,解决办法:

<script type="text/javascript" src="myjs.js" charset="gb2312"></script>

就是在引用 的时候加上charset。gb2312如果不行,可以换用其它的试试,如:utf-8等

7、储存上传的文件时,为了减少各种可能的冲突,最好是用当前时间(精确到分或秒)加上用户的id生成一个新的文件名,再在数据库中存储原文件名和新文件名。

8、图片上传。

有时候用户上传的图片会很大,假设我们已经设了能上传的图片最大是2M,那么用户可能大部分都传1M多的图片,这样的话,如果加载的图片多了,页面打开就会很慢。一个解决办法是把上传的图片压缩成位图。我自己封装了一个函数,以后做项目可以用得上:

 

    /// <summary>
    /// 压缩保存文件
    /// </summary>
    /// <param name="fileUpload">System.Web.UI.WebControls.FileUpload组件</param>
    /// <param name="filter">用于过滤字符串,如string[] allowExtensions = { "bmp", "jpg", "jpeg", "png", "gif", "tiff" };</param>
    /// <param name="fileSize">文件不能超过这个大小,单位byte</param>
    /// <param name="webpath">图片储存的文件夹路径!别以'/'结尾!</param>
    /// <param name="userId">用户名,用于重命文件名</param>
    /// <returns>新的文件名</returns>
    public string SaveSmallUploadFile(System.Web.UI.WebControls.FileUpload fileUpload, string[] filter,int fileSize, string webpath, int userId,int width,int height)
    {
        string filename = fileUpload.FileName;
        string newext;

        //文件大小
        int length = fileUpload.PostedFile.ContentLength;
        if (CheckFileFilter(filename, filter, out newext))
            throw new Exception("上传的文件格式不正确!");
        else if(length >= fileSize)
        {
            throw new Exception("上传的文件太大,文件大小必须小于"+fileSize/1000);
        }

        string path = System.Web.HttpContext.Current.Server.MapPath(webpath);

        if (!System.IO.Directory.Exists(path))
        {
            System.IO.Directory.CreateDirectory(path);
        }

            filename = GetNameWithDate() + "_" + userId + "." + newext;
            string str = System.Web.HttpContext.Current.Server.MapPath(webpath +"\\"+ filename + "_bak." + newext);
            fileUpload.SaveAs(str);

            //创建一个bitmap类型的bmp变量来读取文件。
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(str);

            //新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
            System.Drawing.Bitmap bmpNew = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);

            //将第一个bmp拷贝到bmp2中
            System.Drawing.Graphics draw = System.Drawing.Graphics.FromImage(bmpNew);
            //设置背景透明,当然也可以设成其它颜色
            draw.Clear(System.Drawing.Color.Transparent);
            draw.DrawImage(bmp, 0, 0, width, height);
            filename = filename.Substring(0,filename.LastIndexOf(".")) + ".jpg";//可以在这里改新文件的格式,这里改了,下面的下面这句也要改
            string filePath = webpath + "/" + filename; 
            bmpNew.Save(System.Web.HttpContext.Current.Server.MapPath(filePath), System.Drawing.Imaging.ImageFormat.Jpeg);

            draw.Dispose();
            bmp.Dispose();//释放bmp文件资源

            FileInfo file = new FileInfo(str);
            if (file.Exists) file.Delete();

        return filename;
    }
    /// <summary>
    /// 将当前时间形成字符串以用作文件名
    /// </summary>
    /// <returns></returns>
    public static string GetNameWithDate()
    {
        return DateTime.Now.ToString("yyMMddhhmmssfff");
    }
/// <summary>
    /// 检查文件后缀是否与filter中匹配
    /// </summary>
    /// <param name="filename">文件名称</param>
    /// <param name="filter">匹配类型</param>
    /// <returns></returns>
    private static bool CheckFileFilter(string filename, string[] filter, out string ext)
    {
        bool isFilter = true;
        int i = filename.LastIndexOf(".");
        ext = filename.Substring(i + 1).ToLower();
        if (filter != null)
        {
            for (i = 0; i < filter.Length; i++)
            {
                if (ext == filter[i].ToLower())
                {
                    isFilter = false;
                    break;
                }
            }
        }
        return isFilter;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值