C#上传图片(含有图片大小格式过滤以及改变像素安全存储)

示例一:

public JsonResult Upload(string parameter)
        {
            var file = Request.Files[0];
            try
            {
                //LogHelper.Info("文件长度:" + file.ContentLength.ToString() + "||最大照片:" + 1024 * 1024 * (Config.UploadFileSizeLimitInMB) + "||" + Config.UploadFileSizeLimitInMB);
                if (file == null || file.ContentLength == 0)
                {
                    throw new ValidationException("无上传文件");
                }
                if (file.ContentLength > 1024 * 1024 * Convert.ToInt32(uploadFileSize))
                {
                    throw new ValidationException("上传文件过大");
                }
                #region checkfile
                string fType = file.ContentType;//获取图像的类型  

                bool isimage = fType == "image/bmp" || fType == "image/gif" || fType == "image/pjpeg" || fType == "image/jpeg" || fType == "image/x-png" || fType == "image/png";

                if (fType == "application/octet-stream")
                {
                    BinaryReader reader = new BinaryReader(file.InputStream);
                    string fileClass;
                    byte buffer;
                    buffer = reader.ReadByte();
                    fileClass = buffer.ToString();
                    buffer = reader.ReadByte();
                    fileClass += buffer.ToString();
                    //reader.Close();
                    if (!(fileClass == "255216" || fileClass == "7173" || fileClass == "13780" || fileClass == "6677"))
                    //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar 
                    {
                        throw new ValidationException("请上传图片格式的文件");
                    }
                    else
                    {
                        isimage = true;
                    }

                    file.InputStream.Position = 0;
                }

                string fext = Path.GetExtension(file.FileName).ToLower(); //获取文件后缀

                bool fextIsImage = fext == ".bmp" || fext == ".gif" || fext == ".png" || fext == ".jpeg" || fext == ".jpe" || fext == ".jpg";

                if (!(isimage && fextIsImage))
                {
                    throw new ValidationException("请上传图片格式的文件");
                }
                #endregion

                string uploadPath = string.Format("{0}\\{1}", uploadFilePath, SqlTimeHelper.GetTime().ToString("yyyyMMdd"));
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }
                var fileId = Guid.NewGuid();

                System.Drawing.Image sImage = System.Drawing.Image.FromStream(file.InputStream);
                int tw = sImage.Width - 1;
                int th = sImage.Height - 1;
                WatermarkHelper.AddWartermark(sImage);

                ImagesHelper.DrawImage(sImage, string.Format("{0}\\{1}{2}", uploadPath, fileId, fext), tw, 50);

                ////原始图片的宽度和高度  
                //System.Drawing.Bitmap objPic, objNewPic;  //图像对象
                //objPic = new System.Drawing.Bitmap(sImage);
                //objNewPic = new System.Drawing.Bitmap(objPic, tw, th);  //使用指定的大小初始化objNewPic
                //objNewPic.Save(string.Format("{0}\\{1}{2}", uploadPath, fileId, fext));
                //objPic.Dispose();
                //objNewPic.Dispose();
                sImage.Dispose();  //释放资源

                var rtnJson = Resource.SaveFile(file.FileName, fileId, fext);

                //下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失
                return Json(new ApiSuccessResponse<FileUploadModel>(rtnJson));
            }
            catch (ValidationException ve)
            {
                return Json(new ApiInvalidParaExceptionResponse(ve.Message));
            }
            catch (Exception ue)
            {
                return Json(new ApiExceptionResponse<string>(ue));
            }
        }

示例二:

 public bool SaveStringToFile(string token, string fileName, string content)
        {
            try
            {
                string fext = Path.GetExtension(fileName).ToLower(); //获取文件后缀
                bool fextIsImage = fext == ".bmp" || fext == ".gif" || fext == ".png" || fext == ".jpeg" || fext == ".jpe" || fext == ".jpg";

                byte[] filecontent = System.Convert.FromBase64String(content);
                string path = System.Configuration.ConfigurationSettings.AppSettings["UploadFilePath"];
                BinaryReader reader = new BinaryReader(new MemoryStream(filecontent));
                string fileClass;
                byte buffer;
                buffer = reader.ReadByte();
                fileClass = buffer.ToString();
                buffer = reader.ReadByte();
                fileClass += buffer.ToString();
                reader.Close();
                bool isimage = false;
                if (!(fileClass == "255216" || fileClass == "7173" || fileClass == "13780" || fileClass == "6677"))
                //255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar 
                {
                    return false;
                }
                else
                {
                    isimage = true;
                }

                if (!(isimage && fextIsImage))
                {
                    return false;
                }
                path = Path.Combine(path, fileName);
                FileInfo info = new FileInfo(path);
                if (!Directory.Exists(info.DirectoryName))
                    Directory.CreateDirectory(info.DirectoryName);
                if (System.IO.File.Exists(path)) System.IO.File.Delete(path);
                System.IO.FileStream outfile = System.IO.File.OpenWrite(path);
                outfile.Write(filecontent, 0, filecontent.Length);
                outfile.Close();
                return true;
            }
            catch
            {
                return false;
            }
        }

 

posted @ 2018-12-07 11:32  代码沉思者  阅读(1433)  评论(0编辑  收藏  举报