文件上传的实现(C#)

原创 2004年10月24日 23:58:00
文件上传

一.   在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();



内容结束//
版权声明:本文为博主原创文章,未经博主允许不得转载。

C#实现文件上传下载

使用C#编写一个简单的文件上传和下载功能很简单,只要掌握了一些关键点和易错点就足够在很短的时间内设计一个实用的文档管理页面。...
  • ddc201301
  • ddc201301
  • 2016年12月28日 10:47
  • 3220

C# 使用WebAPI上传文件实现

第一种通过 Form表单形式 (适用于 JS、Android、IOS等平台) /// /// 上传文件 /// /// ...
  • liuxiaoshuang002
  • liuxiaoshuang002
  • 2017年05月03日 09:19
  • 3425

C#上传文件到服务器

c#上传文件到服务器本文主要介绍如何以文件流的方式上传本地文件到服务端:环境介绍 所用语言:客户端C#,服务端Java+Spring框架 客户端代码说明: 通过网页端调试可以发现,上传文件流时候,请求...
  • pinebud55
  • pinebud55
  • 2016年08月11日 14:20
  • 1259

csharp文件上传

  • 2009年10月24日 00:03
  • 58KB
  • 下载

http post方式上传文件(C#)

  • 2010年07月30日 11:45
  • 45KB
  • 下载

c#使用HttpWebRequest上传文件同时携带其他参数

这个小程序参考了另一位博友的代码,做了稍许调整,创建的两个Handler程序,一个上传的ashx,一个接收的ashx 上传文件代码 public void ProcessRequest(HttpC...
  • shellching
  • shellching
  • 2015年12月02日 17:06
  • 11586

c#实现文件上传下载

页面部分代码    CVPro 対話管理      BODY { SCROLLBAR-FACE-COLOR: #aaaaee; SCROLLBAR-HIGHLIGHT-COLOR: #eeeeff; ...
  • liupeng826
  • liupeng826
  • 2007年03月01日 13:33
  • 1426

C#进行Http上传和下载文件

废话不多说,直接上代码 一:客户端 1:上传: 首先:在web.config的节点中加上服务器的地址 http://IP地址:Port"/> 注意:该处的“http://IP地址:Port”...
  • houshubin
  • houshubin
  • 2017年01月07日 14:23
  • 2862

C#中 如何通过路径实现文件上传功能

本文主要介绍了在C#中,如何在后台通过文件名称实现文件的上传功能,该功能与以往的上传方式稍有差异,主要是通过文件流和字节数组这个桥梁来辅助完成。...
  • NC_star
  • NC_star
  • 2017年01月10日 15:58
  • 1407

c#多文件上传简单实现

实现效果:前端实现自定义多文件上传。 此处需要注意的是form标签里面添加属性(enctype="multipart/form-data")因为比较简单废话不说,直接上代码。 前端页面: ...
  • sscrazy
  • sscrazy
  • 2015年06月10日 17:49
  • 2581
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件上传的实现(C#)
举报原因:
原因补充:

(最多只允许输入30个字)