好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

文件读取,保存操作

文件读取,保存操作

大体需求:读取指定文件->进行相关处理->新建文件并保存内容【用户选择后缀名“.mlc”文件后再把得到的".flc"文件保存到相关路径下】

解决方案:1、根据用户选择的‘.mlc’文件先上传到服务器端;

     2、从服务器端取出该文件用文件流进行读取操作;

       3、经过处理的文件以‘.flc’后缀保存到服务器端 ;

              4、最后弹出下载框供用户下载保存。

第二种解决方案是使用ActiveX,之前的一篇《 BS实现文件夹上传下载_终结篇 》可以参考下。

前台代码:

 1   <  div  > 
 2           <  input   type  ="hidden"   id  ="hdFilePaht"   runat  ="server"   /> 
 3           <%  --  这里建立一个隐藏域 用来存地址  --  %> 
 4           <  table   style  =" 100%;"   id  ="mytable"   cellspacing  ="0"  > 
 5               <  tr  > 
 6                   <  td   align  ="center"  > 
 7                       离线激活
  8                   </  td  > 
 9               </  tr  > 
 10               <  tr  > 
 11                   <  td   align  ="center"  > 
 12                       <  asp:FileUpload   ID  ="fpLoad"   onchange  ="CheckFileType()"   runat  ="server"   /> 
 13                   </  td  > 
 14               </  tr  > 
 15               <  tr  > 
 16                   <  td   align  ="center"  > 
 17                       <  asp:RequiredFieldValidator   ID  ="RequiredFieldValidator1"   runat  ="server"   ErrorMessage  ="请选择上传文件!" 
 18                           ControlToValidate  ="fpLoad"  ></  asp:RequiredFieldValidator  > 
 19                       <  asp:RegularExpressionValidator   ID  ="RegularExpressionValidator1"   runat  ="server"   ErrorMessage  ="仅允许上传mlc文件!" 
 20                           ValidationExpression  ="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(mlc)$"   ControlToValidate  ="fpLoad"   /> 
 21                   </  td  > 
 22               </  tr  > 
 23               <  tr  > 
 24                   <  td   align  ="center"  > 
 25                       <  asp:Button   ID  ="btnActive"   runat  ="server"   Text  ="激 活"   Enabled  ="False"   OnClientClick  ="return checkNull()" 
 26                           OnClick  ="btnActive_Click"   /> 
 27                       &nbsp;   &nbsp; 
 28                       <  asp:Button   ID  ="btnCancel"   runat  ="server"   Text  ="取 消"   /> 
 29                   </  td  > 
 30               </  tr  > 
 31           </  table  > 
 32       </  div  > 

js

  FileUpload获取上传文件的路径,有说设置浏览器安全,但是毕竟不是可取的方法。这里我只限IE其实也不是很好的方法

 1           function CheckFileType() {
  2               if (!document.all) {
  3                   alert("请使用IE浏览器");
  4                   return;
  5               }
  6               var objButton = document.getElementById("btnActive"); //激活按钮
  7               var objFileUpload = document.getElementById('fpLoad'); //FileUpload 
  8               var FileName = new String(objFileUpload.value); //文件名
  9               var extension = new String(FileName.substring(FileName.lastIndexOf(".") + 1, FileName.length)); //文件扩展名 
  10               if (extension == "mlc" || extension == "MLC") 
  11               {
  12                   objButton.disabled = false; //启用上传按钮 
  13               }
  14               else {
  15                   objButton.disabled = true; //禁用上传按钮
  16                   alert('仅允许上传mlc文件!'); 
  17               }
  18          }

后台代码:

   ///   <summary> 
         ///   激活    
          ///   </summary> 
         ///   <param name="sender"></param> 
         ///   <param name="e"></param> 
         protected   void  btnActive_Click( object   sender, EventArgs e)
        {
              if   (fpLoad.HasFile)
            {
                  try  
                {
                      string  filePath = hdFilePaht.Value; //  文件路径    
                     string  fileExt =  System.IO.Path.GetExtension(fpLoad.FileName);
                      if  (fileExt !=  "  .mlc  "  )
                    {
                        ClientScript.RegisterStartupScript(  this .GetType(),  "" ,  "  <script>alert('仅限mlc文件');</script>  "  );
                          return  ;
                    }
                      string  savePath = Server.MapPath( "  /mlcFile  " ); //  文件上传路径 
                     if  (! Directory.Exists(savePath))
                        Directory.CreateDirectory(savePath);
                      string  fileSavePath = savePath +  "  \\  "  + DateTime.Now.ToString( "  yyyyMMddhhmmssfff  " ) +  "  _  "  +  fpLoad.FileName;
                      if   (File.Exists(fileSavePath))
                        File.Delete(fileSavePath);   //  文件上传存在则删除 
                     fpLoad.SaveAs(fileSavePath);
                      byte [] btRead =  FileToBinary(fileSavePath);
                      string  read =  System.Text.Encoding.ASCII.GetString(btRead);
                    …………………………
            ………………………………
一些数据处理(可不管)
………………………… byte [] byDataValue = System.Text.Encoding.ASCII.GetBytes(encrypt); string fileOutPath = savePath + " \\ " + fpLoad.FileName.Split( ' . ' )[ 0 ] + " .flc " ; if (File.Exists(fileOutPath)) File.Delete(fileOutPath); // 转换后文件存在则删除 BinaryToFile(savePath, fpLoad.FileName.Split( ' . ' )[ 0 ] + " .flc " , byDataValue); Response.Redirect( " http:// " + System.Web.HttpContext.Current.Request.Url.Authority + " /mlcFile/ " + fpLoad.FileName.Split( ' . ' )[ 0 ] + " .flc " ); } catch (Exception ex) { ClientScript.RegisterStartupScript( this .GetType(), "" , " <script>alert('发生错误: " + ex.Message.ToString() + " ');</script> " ); } } else ClientScript.RegisterStartupScript( this .GetType(), "" , " <script>alert('请选择上传文件');</script> " ); } #region FoldHelper /// <summary> 将文件转换为二进制流进行读取 /// </summary> /// <param name="fileName"> 文件完整名路径 </param> /// <returns> 文件二进制流 </returns> private static byte [] FileToBinary( string fileName) { FileStream fsRead = new FileStream(fileName, FileMode.Open, FileAccess.Read); try { if (fsRead.CanRead) { int fsSize = Convert.ToInt32(fsRead.Length); byte [] btRead = new byte [fsSize]; fsRead.Read(btRead, 0 , fsSize); return btRead; } else { throw new Exception( " 文件读取错误! " ); } } catch (Exception ex) { throw new Exception(ex.Message); } finally { fsRead.Close(); } } /// <summary> 将二进制流转换为对应的文件进行存储 </summary> /// <param name="storePath"> 存储文件名的路径 </param> /// <param name="fileName"> 文件名 </param> /// <param name="btBinary"> 二进制流 </param> private static void BinaryToFile( string storePath, string fileName, byte [] binary) { FileStream fsWrite = new FileStream(storePath + " \\ " + fileName, FileMode.Create, FileAccess.Write); try { if (fsWrite.CanWrite) { fsWrite.Write(binary, 0 , binary.Length); } } catch (Exception ex) { throw new Exception(ex.Message); } finally { fsWrite.Close(); } } #endregion

效果图:一

效果图:二

注意:效果是出来了,但不是我们要的下载页面的效果,这里还有注意如果后缀是‘.flc’ ……浏览器解析不了则显示不存在该文件 。不是不存在是浏览器它不认识。所以要进行一些设置。如下:

效果图:三: IIS设置 如果你要下载其他格式的文件,则添加进去就可以了

效果图:四 

效果图:五 保存后效果

                                                   


作者: PEPE  
出处: http://pepe.cnblogs.com/  
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于文件读取,保存操作的详细内容...

  阅读:47次