首页 > 编程语言 >C#文件上传和下载

C#文件上传和下载

时间:2023-12-18 19:14:11浏览次数:38  
标签:文件 File1 C# Response myStr byte 上传 PostedFile 下载

一.   在Form中一定要将encType设为"multipart/form-data": 
<form id="WebForm3" method="post" encType="multipart/form-data" runat="server" > 

二.   判断是否有文件上传了: 
当用户没有选择任何要上传的文件,即HtmlInputFile控件中的文本框为空时点击了上传按钮后,在服务端得到的File1.PostedFile对象不是null,而是有对象的,所以不能用(File1.PostedFile == null)来判断是否上传了文件,用(File1.PostedFile.ContentLength != 0)来判断比较好 

三.   判断上传文件MIMIE类型: 
文件上传后可以用File1.PostedFile.ContentType来读取这个文件的MIMIE类型,这个MIMIE类型是系统通过上传文件的后缀名来获得的。 

四.   保存上传的文件: 

1.    文件可以通过File1.PostedFile.SaveAs(path) //path是服务器上的物理路径,来保存文件。 

if(File1.PostedFile.ContentLength != 0) 



    StringBuilder myStr = new StringBuilder(); 

    myStr.Append("文件名称:" + File1.PostedFile.FileName); 

    myStr.Append("<br>"); 

    myStr.Append("文件类型:" + File1.PostedFile.ContentType); 

    myStr.Append("<br>"); 

    myStr.Append("文件长度:" + File1.PostedFile.ContentLength.ToString()); 

    myStr.Append("<br>"); 

    

    string path = Server.MapPath("./"); //当前路径 

    string fileName = File1.PostedFile.FileName.Substring(File1.PostedFile.FileName.LastIndexOf('//')+1); 

    path += fileName; 

    if(File.Exists(path) == true) 

    { 

       Label1.Text = "服务器上已经有了你正在上传的文件:" + fileName; 

       return; 

    } 

    File1.PostedFile.SaveAs(path); 



    myStr.Append("保存完毕!"); 

    myStr.Append("<br>"); 

    Label1.Text = myStr.ToString(); 



else 



    Label1.Text = "你没有选择要上载的文件或者上传的文件长度为0!"; 




2.    文件也可以通过二进制的读取后存放到数据库的二进制的字段中: 
byte[] fileCont = new byte[File1.PostedFile.ContentLength]; 
File1.PostedFile.InputStream.Read(fileCont,0, File1.PostedFile.ContentLength); 
然后将此字节数组fileCont赋给数据库的二进制字段的参数,写到数据库中。 



文件下载 

一.   服务端通过Response输出相应的HTTP Response Headers信息,和要下载的文件的数据来把文件发送到客户端,HTTP Response Headers表现在html文件中是下面的形式: 
<meta http-equiv="Content-Type" content="text/htm "> 
http-equiv表示是Headers的名称,content表示这个Headers的值 

二.   首先,要输出文件的MIME类型: 
Page.Response.AddHeader( "Content-Type", “MIME类型” );  

三.   其次,要输出下载的文件的打开位置和文件名: 
Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName ); 
content-disposition 的 HTTP response header 允许指定文档表示的信息。使用这种 header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。 
打开位置: 
attachment ―― 表示作为附件发送到客户端,客户端将单独打开此文件。 
inline ―― 表示将在浏览器中打开这个文件。 
文件名: 
filename ―― 表示发送到客户端文件的文件名。 

四.   准备发送到客户端的文件数据: 

1.    先将不同类型来源的数据转成byte类型的数组,再通过Response.BinaryWrite方法发送到客户端: 

1.1.   读取文件来获得byte数组: string FileName; //生成或获取要发送到客户端的文件名 

string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下 

if(File.Exists(filePath) == false) 



    //服务器上没有这个文件 

    return; 



FileStream myFile = File.OpenRead(filePath); //读取文件进入FileStream 

byte[] fileCont = new byte[myFile.Length]; 

myFile.Read(fileCont,0,(int)myFile.Length);  //将文件流中的内容转成byte数组 


1.2.   在数据库的二进制字段中读取: //从url获取图片的id 

string ImageId = Request.QueryString["img"]; 

//构建查询语句 

string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId; 

SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() ); 

SqlCommand command = new SqlCommand( sqlText, connection); 

connection.Open(); 

SqlDataReader dr = command.ExecuteReader(); 

if ( dr.Read()) 



    byte[] fileCont = (byte[]) dr["img_data"] ; 



connection.Close(); 


1.3.   从internet上读取文件: HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create( " http://www.via.com/aa.xls "); 

HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); 

Stream readStream = myWebResponse.GetResponseStream(); 

           

byte[] bytes = new byte[readStream.Length]; 

bytes = readStream.Read(bytes,0,readStream.Length); 


通过上述三种方法获得的文件内容的byte数组就可以用来输出了: 
Page.Response.BinaryWrite(fileCont); 

Page.Response.End(); 



2.    直接读取文件输出: string FileName; //生成或获取要发送到客户端的文件名 

string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下 

if(File.Exists(filePath) == false) 



    //服务器上没有这个文件 

    return; 



Page.Response.Clear(); 

Page.Response.AddHeader( "Content-Type", "image/gif" ); //根据MIME的不同设置 

Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath); 

Page.Response.WriteFile(filePath); 

Page.Response.End(); 

   

参考文章:http://blog.ncmem.com/wordpress/2023/12/18/c%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd/

欢迎入群一起讨论

 

 

标签:文件,File1,C#,Response,myStr,byte,上传,PostedFile,下载
From: https://www.cnblogs.com/songsu/p/17912001.html

相关文章

  • A Deformable Attention Network for High-Resolution Remote Sensing Images Semanti
    ADeformableAttentionNetworkforHigh-ResolutionRemoteSensingImagesSemanticSegmentation*Authors:[[RenxiangZuo]],[[GuangyunZhang]],[[RongtingZhang]],[[XiupingJia]]DOI:10.1109/TGRS.2021.3119537初读印象comment::(MDANet)提出了可变形注意力,结......
  • Scale-Prior Deformable Convolution for Exemplar-Guided Class-Agnostic Counting
    Scale-PriorDeformableConvolutionforExemplar-GuidedClass-AgnosticCounting初读印象comment::(计数用的一个网络)提出了一个标度优先的可变形卷积,将典范的信息,例如标度,整合到计数网络主干中。动机本文考虑的是类别无关的计数,其中计数模型预测由一组查询图像中的少数......
  • Object Tracking Network Based on Deformable Attention Mechanism
    ObjectTrackingNetworkBasedonDeformableAttentionMechanismLocallibrary初读印象comment::(DeTrack)采用基于可变形注意力机制的编码器模块和基于自注意力机制的编码器模块相结合的方式进行特征交互。基于可变形注意力机制的编码器可以在不聚焦所有像素的情况下精......
  • Deformable ConvNets V2: More Deformable, Better Results 可变形卷积v2
    DeformableConvNetsV2:MoreDeformable,BetterResults*Authors:[[XizhouZhu]],[[HanHu]],[[StephenLin]],[[JifengDai]]DOI:10.1109/CVPR.2019.00953初读印象comment::(可变形卷积v2)增加了可变形卷积的数量、调制因子和额外的用来特征模仿的网络。deformab......
  • (15-418)Lecture 3 Parallel Programming Abstractions
    抽象VS实现实例:ISPC程序ISPC是一种SPMD(singleprogrammultipledata)编译器。利用ISPC编写的计算sin(x)的程序如下图:ISPC提供了一种抽象,当调用ISPC函数时(即程序中调用sinx的语句),会产生一个gang,这个gang含有多个ISPC实例,每个实例会执行自己的代码,当每个实例都执行完后,恢复原先......
  • 网络概念趣讲:IP地址、子网掩码、网关、DHCP服务和PPPoE拨号
    晚上好,我的网工朋友。5G技术的更新,推动了新一代的网络通信发展,家庭宽带上网也从最初的十几K的速度,提升到了现在动则上百上千兆的速度。很多有部署了家庭NAS的用户,甚至都已经更新到了10G级别的内部局域网了。现在6G都要来了。在这个信息互联的时代,网络的基础知识肯定得掌握,今天就说......
  • VUE前端实现视频截图并上传到服务器
    做视频上传的时候有时候需要上传预览图,后端一般可以用FFMPEG来实现,前端也可以直接截图,这个功能不需要后台实现,VUE前端利用canvas画图,然后转换Base64就可以完成。1.前端代码<el-form-itemlabel="视频地址"requiredprop="videoURL"><el-upload:action="upload......
  • 缺少反向ETL能力?ETLCloud帮你清障
    一、什么是反向ETLETL,全称 Extract-Transform-Load,它是将大量的原始数据经过提取(extract)、转换(transform)、加载(load)到目标存储数据仓库的过程,那么反向ETL我们就可以理解为从数据仓库或数据湖中将数据反向加载回源系统的过程。反向ETL常见于以下情况:数据修正:当数据仓库中的数据发生......
  • js Cookie、sessionStorage、localStorage 的区别
    fetch发送2次请求的原因参考回答:fetch发送post请求的时候,总是发送2次,第一次状态码是204,第二次才成功?原因很简单,因为你用fetch的post请求的时候,导致fetch第一次发送了一个Options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求......
  • openGauss学习笔记-164 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-164openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-处理错误表164.1操作场景当数据导入发生错误时,请根据本文指引信息进行处理。164.2查询错误信息数据导入过程中发生的错误,一般分为数据格式错误和非数据格式错误。数据格式错......