如何在c#,asp.net中一次上传多个图像时检查图像是否已存在/已连接

Saq*_*taf 5 javascript c# asp.net jquery c#-4.0

我将使用asp.net文件上传控件上传多个图像.对于这个解决方案有很多建议.目前正在使用DataTable.所有图像放入DataTable视图状态,然后检查其行..我标记检查FileName,如果已经存在,那么它将不会上传..但如果任何用户浏览/上传具有相同名称但来自不同文件夹/路径的图像将成为一个问题.我的代码在这里

 private void AttachImage()
        {
                string fileName = Convert.ToString(Guid.NewGuid());
                string filePath = "images/" + fileName;
                fileName = Path.GetFileName(ImageUpload.PostedFile.FileName);
                ImageUpload.SaveAs(Server.MapPath(filePath));
                DataTable dt = new DataTable();

                DataColumn dc = new DataColumn();
                dc = new DataColumn("Name", typeof(String));
                dt.Columns.Add(dc);

                dc = new DataColumn("Path", typeof(String));
                dt.Columns.Add(dc);

                dt.Rows.Add(fileName, filePath);
                if (ViewState["dt"] == null)
                {
                    ViewState["dt"] = dt;
                }
                else// (ViewState["dt"] != null)
                {
                    DataTable tmpTable = (DataTable)ViewState["dt"];
                    tmpTable.Rows.Add(fileName, filePath);
                    ViewState["dt"] = tmpTable;
                }


            lstProductsImage.DataSource = (DataTable)ViewState["dt"];
            lstProductsImage.DataBind();

        }
Run Code Online (Sandbox Code Playgroud)

其次:使用GUID来分配图像.但它也不合适,因为它只会更改FileName,我们无法确定服务器上是否存在此文件.第三个选项可以是,如果文件已存在于上传文件夹中,我们会询问用户是否要覆盖现有文件.或者我应该使用System.IO.File.Exists(pathToCheck))??

我希望你身边有好的建议......谢谢:Saquib

Muh*_*eem 1

老兄!我审查了您的代码,并从我的角度来看... 1-在这种情况下不要使用 GUID。2-使用以下代码获取文件名(根据您的要求更改)

string fileName = System.IO.Path.GetFileName(dsPhotosFiles.Tables[0].Rows[i]["filePath"].ToString());
Run Code Online (Sandbox Code Playgroud)

3- 使用数组获取图像字节(例如 byte[] imageBytes;)

byte[] imageBytes;
  imageBytes = (byte[])dsPhotosFiles.Tables[0].Rows[i]["fileBytes"];
Run Code Online (Sandbox Code Playgroud)

或 将文件读入数据流 AND && 使用((System.IO.File.Exists(Server.MapPath(SavePath + Filename))) ) + ImageBytes 检查 FileName + FilePath

byte[] myData = new Byte[nFileLen];

4-之后打开它检查文件是否真的是JPEG(可以从以下代码中获得一些帮助..

System.Drawing.Image.GetThumbnailImageAbort myCallBack = 
                       new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
        Bitmap myBitmap;

       try
        {
            myBitmap = new Bitmap(Server.MapPath(sSavePath + sFilename));

            // If jpg file is a jpeg, create a thumbnail filename that is unique.
            file_append = 0;
            string sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
                                                     + sThumbExtension + ".jpg";
            while (System.IO.File.Exists(Server.MapPath(sSavePath + sThumbFile)))
            {
                file_append++;
                sThumbFile = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + 
                               file_append.ToString() + sThumbExtension + ".jpg";
            }

            // Save thumbnail and output it onto the webpage
            System.Drawing.Image myThumbnail
                    = myBitmap.GetThumbnailImage(intThumbWidth, 
                                                 intThumbHeight, myCallBack, IntPtr.Zero);
            myThumbnail.Save (Server.MapPath(sSavePath + sThumbFile));
            imgPicture.ImageUrl = sSavePath + sThumbFile;

            // Displaying success information
            lblOutput.Text = "File uploaded successfully!";

            // Destroy objects
            myThumbnail.Dispose();
            myBitmap.Dispose();
        }
        catch (ArgumentException errArgument)
        {
            // The file wasn't a valid jpg file
            lblOutput.Text = "The file wasn't a valid jpg file.";
            System.IO.File.Delete(Server.MapPath(sSavePath + sFilename));
        }
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助...问候:Azeem Raavi