文件读取,保存操作
大体需求:读取指定文件->进行相关处理->新建文件并保存内容【用户选择后缀名“.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 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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息