`

文件上传的实现(C#)

阅读更多
文件上传

一.   在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# 使用WebRequest实现多文件上传.docx

    "C# 使用 WebRequest 实现多文件上传" C# 使用 WebRequest 实现多文件上传是.NET Framework 中的一种常见的网络编程技术。通过使用 WebRequest 类,可以实现 HTTP 请求和响应,包括多文件上传。在本篇文章中,我们...

    C#实现文件上传

    ### C#实现文件上传的关键知识点 #### 一、概述 在C#中实现文件上传是一项常见但非常重要的功能,尤其对于Web应用来说更是如此。本文将深入探讨如何使用C#来实现文件上传,并重点关注以下几个方面:如何利用C#进行...

    C#实现HTTP上传文件的方法

    通常,文件上传是通过POST请求实现的,其中包含一个名为"multipart/form-data"的Content-Type,用于分隔不同的数据部分。每个部分都有自己的边界,以便服务器能够正确解析数据。 在C#中,我们可以利用System.Net...

    c# 用Base64实现文件上传

     使用base64进行文件上传的具体流程是:前台使用js将文件转换为base64格式,后台通过高级编程语言,将base64格式的文件,转换为原文件。下面就来演示一下,C#语言配合js,如何实现图片的base64格式上传与解析保存。...

    C# .NET FileUpload 多文件上传例子

    在.NET框架中,C#语言提供了丰富的功能来处理文件上传操作。对于初学者来说,理解并实现多文件上传是一项重要的技能,它可以帮助你构建交互性强、功能完善的Web应用程序。在这个"C# .NET FileUpload 多文件上传例子...

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

    为了实现“不受大小限制”的文件上传,我们需要确保服务器端的配置允许接收大文件,并在客户端代码中处理大文件流。这可能涉及分块上传或使用流处理技术,以避免一次性加载整个文件到内存中。 在上传过程中显示进度...

    C#webapi文件上传下载源码

    在这个场景下,"C# WebAPI文件上传下载源码"指的是使用C#编写的一套实现文件上传和下载功能的WebAPI服务代码。 文件上传功能是Web应用中的常见需求,允许用户将本地文件传输到服务器。在C# WebAPI中,这通常通过...

    web大文件上传、秒传、分块上传演示c#.net

    使用webupload实现了在C# .net项目中的断点续传演示(绝对不亏的,现在.net中webupload服务端好多都不完整,我这个是自己写完用到项目中的,比较稳定,虽然代码比较初级,后面也没整理) 演示地址:...

    C#通过winform和http上传文件

    以下是实现C# WinForm和HTTP文件上传的步骤: 1. 创建WinForm界面: - 使用Visual Studio新建一个WinForm项目。 - 在设计视图中添加一个OpenFileDialog控件,用于让用户选择文件。 - 添加一个Button控件,作为...

    C#实现文件上传下载源代码

    "C#实现文件上传下载源代码" 本文将详细介绍使用C#实现文件上传和下载功能的源代码。该源代码使用ASP.NET框架,实现了文件上传、下载和文件夹管理功能。 C#文件上传下载源代码解析 1. 文件上传功能实现 在源代码...

    C# WinForm 通过WebSocket 实现文件传输示例

    为了实现C# WinForm中的WebSocket文件传输,我们需要以下几个步骤: 1. **创建WebSocket服务端**:在服务端,我们需要一个WebSocket服务器来接收客户端的连接请求,并处理文件传输。可以使用如`System.Net....

    C# WebClient 上传文件

    在开发过程中,经常会遇到需要将客户端的文件上传到服务器的需求。C#语言提供了多种方法来实现这一功能,其中`WebClient`类就是一种非常简便的方式。本文将详细介绍如何使用`WebClient`类上传文件,并对代码进行深入...

    C#开发文件批量上传百度云

    在C#中,我们可以利用HTTP客户端库(如HttpClient或WebClient)来实现文件上传。首先,你需要注册百度云开发者账号,并获取API密钥和访问令牌。这些凭证用于验证你的应用程序,确保只有授权的请求才能访问百度云服务...

    c# 实现文件FTP上传服务器

    c# 实现文件FTP上传至服务器  WebClient上传文件至服务器(不带进度条)    要上传的文件(全路径格式)  &lt;param name="strUrlDirPath"&gt;Web服务器文件夹路径  &lt;returns&gt;True/False是否上传成功&lt;/returns&gt;

    C# 大文件和多文件传输

    在IT行业中,大文件和多文件传输是一项常见的...总结,实现C#的大文件和多文件传输,需要结合文件流操作、进度跟踪、时间记录以及多线程/异步编程等技术。通过这些方法,可以构建出高效且用户体验良好的文件传输系统。

    C#实现FTP上传、下载、删除文件,扫描(正则过滤)指定文件并上传

    C#实现FTP上传、下载、删除文件,扫描(正则过滤)指定文件并上传 C#实现FTP上传、下载、删除文件,扫描(正则过滤)指定文件并上传

    C#单文件上传

    在本教程中,我们将探讨如何使用HTML控件实现单文件上传功能,并通过C#后端代码处理上传过程,同时实现类似AJAX的效果,使得文件上传无须页面刷新。 一、HTML控件与文件上传 在HTML中,`&lt;input&gt;`标签可以用来创建...

    C#Webservice+微信小程序上传多个文件

    总结来说,"C# Webservice+微信小程序上传多个文件"这一主题涵盖了C# Web服务的开发,与微信小程序的交互,以及安全文件上传策略。通过这个项目,开发者可以学习到如何利用C#处理HTTP文件上传,理解Multipart请求...

    C#实现了多文件上传功能

    ### C#实现多文件上传功能 #### 背景与目的 在早期的Web应用程序开发过程中,文件上传是一项较为复杂的任务。随着.NET框架的发展和完善,文件上传变得异常简单且易于集成到各种应用之中。本篇内容将详细介绍如何...

Global site tag (gtag.js) - Google Analytics