处理图片保存到临时文件夹并在试图显示

本文介绍了一种使用ASP.NET MVC框架处理图片上传的方法,包括图片类型的判断、重命名、临时保存和最终保存流程,以及如何在控制器中实现这些功能。
  1.  在试图通过<input type="file" name="file" accept=".doc,.docx" "uploadWord()" />选择到图片再通过post提交方式提交from表单方式将携带图片文件的from表单传递到控制器中,
    

在控制器中创建一个方法用于接收试图传过来的数据,并在这个方法里面去处理图片和保持图片,注意:这里图片保存并非是将图片保持到数据库里面去,而是把图片保存到项目里面的某个目录里,当然这就涉及到了你指定保存图片的目录的路径,也涉及到保持路径的的拼接,保持目录有两个一个是临时保持目录,一个是最终保存目录,临时目录用于存放还没有确定保存之前选择到需要保存的图片,最终保存目录存放的是确定保存后选择到的图片,在确定保存后,要从临时目录中把相关的图片移动到最终目录,当然这里的移动不会把临时目录的图片删除,相当于把图片复制了一份给到最终目录,那么我们就还得通过一个定时器在每天或者多天的规定时间去清空一下临时目录,释放存储空间。图片本身是存放到项目目录里的,但我们还得保存一下图片的存放在项目目录的具体路径到数据库,因为当年保存后再想在页面显示出图片就得知道图片的链接。为了保正每一张图片的每次都是独一无二的我们可以通过string fileExtension =
System.IO.Path.GetExtension(file.FileName);获取到文件类型,通过string
fileName = DateTime.Now.ToString(“yyyyMMddHHmmss”) + FileName创建新的图片名称,这操作在控制器中的方法中进行,通过传过来的数据获取到图片的文件类型fileExtension再通过在fileExtension前面拼接一个系统的当前时间DateTime.Now.ToString(“yyyyMMddHHmmss”)组合成新的图片名称,因为时间是不重复的所有这样就可以确保 保存下来的每一张图片的名称都是不同的,处理完图片名称后就涉及到图片保存路径的问题,通过string
filePath = Server.MapPath("~/Document/Title/Temp/") + fileName;创建路径;之后就判断路径存不存在如果不存在就创建目录,如果目录存在再判断一下文件类型是否是多种图片类型中的一种,这样确保保存的是图片而不是其他的文件,之后通过file.SaveAs(filePath); 将文件保存到指定路径,这里保存这是保存到临时文件夹,最终返回一个链接到试图,在试图就可以将返回的链接给到HTML里面的imgs标签里从而可以实现图片的显示,当然这个图片文件也是保存到了项目的临时目录里了。保存到最终文件夹过程暂时不谈。

以下是一个例子只有控制器方法:试图的不写(注意:一以下代码来自于李老师的授课内容)

public ActionResult UpEeditorFile(HttpPostedFileBase file)

    {

        ReturnJson msg = new ReturnJson();

        msg.State = false;

        try

        {

            //判断文件是否为空

            if (file != null)

            {

                #region 获取文件类型 设置文件名称 检查文件目录是否存在


                //获取文件类型

                string fileExtension =

System.IO.Path.GetExtension(file.FileName);

                //创建文件的名称

                string fileName = DateTime.Now.ToString("yyyy-MM-dd") + Guid.NewGuid() +

fileExtension;//表示全局唯一的标识符(GUID)

//检查目录是否存在,如果不存在就创建一个目录

                if (!Directory.Exists(Server.MapPath("~/Document/Title/Temp/")))

                {

                    //创建临时目录/Document/Notice

                    Directory.CreateDirectory(Server.MapPath("~/Document/Title/Temp/"));

                }

                if (! Directory.Exists(Server.MapPath("~/Document/Title/Images/")))

                {

                    //创建目录/Document/Notice/

                    Directory.CreateDirectory(Server.MapPath("~/Document/Title/Images/"));

                }

                #endregion

                //保存文件的路径

                string filePath =

Server.MapPath("~/Document/Title/Temp/") + fileName;

                #region 若扩展名不为空则判断文件是否是指定图片类型 ,然后返回img

                if (fileExtension != null)

                {

                    fileExtension =

fileExtension.ToLower();//转小写字母

                    if ("(.gif)|(.jpg)|(.bmp)|(.jpeg)|(.png)".Contains(fileExtension))

                    {

                        //保存文件

file.SaveAs(filePath); //将文件保存到指定路径

                        string str = "<img

“AutoResizeImage(200,200,this)” "

                         + "src=\"/Document/Title/Temp/" + fileName + "\"

/>";

                        msg.State = true;

                        msg.Text = str;

                    }

                    else

                    {

                        msg.Text = "只支持上传图片文件(gif,jpg,bmp,jpeg,png)";

                    }

                }

                #endregion

            }

            else

            {

                msg.Text = "上传的文件为空";



            }

        }

        catch (Exception)

        {

            msg.Text = "上传数据异常";

        }



        return Json(msg, JsonRequestBehavior.AllowGet);

   }
以下bat脚本没有按照预期工作,且关于找不到文件的调试过于简单让我无法定位错误,原始文件和副本文件和和脚本文件位于同一个文件夹中,我需要你给我尽可能多的调试信息来定位重命名失败的错误 @echo off setlocal enabledelayedexpansion :: 获取当前文件夹名称 for %%i in ("%~dp0.") do set "folderName=%%~ni" :: 调试信息 echo 调试信息: echo. echo 1. 当前脚本的完整路径: %~dp0 echo 2. 提取的文件夹名称: !folderName! echo. :: 创建临时文件存储需要修改的文件列表 set "tempFile=%temp%\fileList.tmp" set "processedFile=%temp%\processedList.tmp" set "sortedTempFile=%temp%\sortedList.tmp" echo 临时文件路径: %tempFile% echo 处理后的文件列表路径: %processedFile% echo 排序后的临时文件路径: %sortedTempFile% echo. :: 找到所有带 "_副本" 的图片文件 for /f "delims=" %%i in ('dir /b /a-d *.jpg *.png *.gif *.bmp 2^>nul ^| findstr /i "_副本"') do ( echo %%i >> "%tempFile%" ) echo 检查是否存在副本文件... if not exist "%tempFile%" ( echo 当前文件夹中没有需要处理的副本文件。 pause exit /b ) echo 发现副本文件,正在处理... type "%tempFile%" echo. :: 处理副本文件,确保对应的原始文件存在 set "index=0" for /f "delims=" %%i in (%tempFile%) do ( set "copyFileName=%%i" set "originalFileName=!copyFileName:_副本=! " echo 正在处理: !copyFileName! echo 对应的原始文件: !originalFileName! :: 检查原始文件是否存在 if exist "!originalFileName!" ( echo !originalFileName! >> "%processedFile%" set /a index+=1 echo 原始文件存在,已添加到处理列表。 ) else ( echo 原始文件不存在,跳过。 ) echo. ) echo 检查是否有需要处理的文件对... if %index% equ 0 ( echo 没有找到对应的原始文件和副本文件对。 del "%tempFile%" pause exit /b ) echo 发现 %index% 个需要处理的文件对。 type "%processedFile%" echo. :: 从处理后的文件列表中提取文件名中的数字排序(去掉文件类型后缀) set "numbers=" for /f "delims=" %%i in (%processedFile%) do ( :: 去掉文件类型后缀 set "fileNameWithoutExt=%%~ni" for /f "tokens=1 delims=_" %%a in ("!fileNameWithoutExt!") do ( set "fileNum=%%a" echo !fileNum! >> "%sortedTempFile%" ) ) :: 使用 sort 命令对数字进行排序 sort "%sortedTempFile%" /O "%sortedTempFile%" echo 提取的数字列表: type "%sortedTempFile%" echo. :: 生成新的文件名 set "n=1" for /f "delims=" %%i in (%sortedTempFile%) do ( set "fileNum=%%i" :: 查找对应的原始文件和副本文件 for /f "tokens=1* delims=_" %%a in ('dir /b /a-d %%i_*') do ( set "originalFile=%%a_%%b" set "copyFile=%%a_%%b_副本" if exist "!originalFile!" if exist "!copyFile!" ( set "newName=!folderName! (!n!)_%%b" echo 正在重命名: echo 原始文件: !originalFile! echo 副本文件: !copyFile! echo 新名称: !newName!_副本 echo. :: 重命名副本文件 ren "!copyFile!" "!newName!_副本" ren "!originalFile!" "!newName!" set /a n+=1 ) ) ) :: 删除临时文件 del "%tempFile%" del "%processedFile%" del "%sortedTempFile%" echo 文件重命名完成! pause 脚本的调试信息: 调试信息: 1. 当前脚本的完整路径: C:\Users\jiayi.wei\Desktop\GCST - 副本\ 2. 提取的文件夹名称: GCST - 副本 临时文件路径: C:\Users\jiayi.wei\AppData\Local\Temp\fileList.tmp 处理后的文件列表路径: C:\Users\jiayi.wei\AppData\Local\Temp\processedList.tmp 排序后的临时文件路径: C:\Users\jiayi.wei\AppData\Local\Temp\sortedList.tmp 检查是否存在副本文件... 发现副本文件,正在处理... 1234_副本.jpg 1235_副本.jpg 1236_副本.jpg 1237_副本.jpg 1238_副本.jpg 1239_副本.jpg 1249_副本.jpg 正在处理: 1234_副本.jpg 对应的原始文件: 1234.jpg 原始文件存在,已添加到处理列表。 正在处理: 1235_副本.jpg 对应的原始文件: 1235.jpg 原始文件存在,已添加到处理列表。 正在处理: 1236_副本.jpg 对应的原始文件: 1236.jpg 原始文件存在,已添加到处理列表。 正在处理: 1237_副本.jpg 对应的原始文件: 1237.jpg 原始文件存在,已添加到处理列表。 正在处理: 1238_副本.jpg 对应的原始文件: 1238.jpg 原始文件存在,已添加到处理列表。 正在处理: 1239_副本.jpg 对应的原始文件: 1239.jpg 原始文件存在,已添加到处理列表。 正在处理: 1249_副本.jpg 对应的原始文件: 1249.jpg 原始文件存在,已添加到处理列表。 检查是否有需要处理的文件对... 发现 7 个需要处理的文件对。 1234.jpg 1235.jpg 1236.jpg 1237.jpg 1238.jpg 1239.jpg 1249.jpg 提取的数字列表: 1234 1235 1236 1237 1238 1239 1249 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 找不到文件 文件重命名完成! 请按任意键继续. . . 优化代码,我的需求是: 我需要一个bat,使用方法是复制一份到文件夹中,在文件夹中双击使用,文件夹中的文件名称为四个数字或四个数字加'_副本',先找到所有名字中带'_副本'的文件,组成一个list,找到每一个文件的名字中不带'_副本'的文件名加入list, 这个list就是所有需要修改名字的文件清单,命名规则是: 将名字中的4位数字修改为'所在文件夹名字'+' '+'(n)' 其中,n为待修改清单中文件的名字转化为数字后升序的排序数字 1.修改逻辑只针对图片文件, 2.只有同具备原始文件且具有副本文件的组合才进行改名操作
最新发布
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值