首页 > 编程语言 >C#实现文件上传与下载功能实例

C#实现文件上传与下载功能实例

时间:2023-11-01 16:33:24浏览次数:28  
标签:case fileExt ContentType string C# break 实例 上传

最近学习了 C#实现文件上传与下载,现在分享给大家。

1、C#文件上传

创建MyUpload.htm页面,用于测试

<form name="form1" method="post" action="UploadFile.aspx" id="form1"
enctype="multipart/form-data">
<input type="file" id="txtFile" name="picfile" /></br>
<input type="submit" value="上传" />
</form>

创建UploadFile.aspx文件,在UploadFile.aspx.cs键入如下代码:

Random rnd = new Random(); //产生随机数
private string _directory = @"/File/UploadFile"; //目录
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (RequestFilesCount > 0)
{
//判断文件大小
int length = RequestFiles[0]ContentLength;
if (length > 1048576)
{
ResponseWrite("文件大于1M,不能上传");
return;
}

string type = RequestFiles[0]ContentType;
string fileExt = PathGetExtension(RequestFiles[0]FileName)ToLower();
//只能上传图片,过滤不可上传的文件类型
string fileFilt = "gif|jpg|php|jsp|jpeg|png|";
if (fileFiltIndexOf(fileExt) <= -1)
{
ResponseWrite("对不起!请上传图片!!");
return;
}
else
{
string fileName = ServerMapPath(_directory) + "\\" + DateTimeNowToString("yyyyMMddHHmmssfff") + rndNext(10, 99)ToString() + fileExt;
RequestFiles[0]SaveAs(fileName);
ResponseWrite("上传成功!");
}
}
}
catch
{
throw new Exception();
}
}

2 、C#文件下载

创建DownloadFile.aspx,在DownloadFile.aspx.cs键入如下方法:

/// <summary>
/// C#文件下载
/// </summary>
/// <param name="filename"></param>
public void MyDownload(string filename)
{

string path = ServerMapPath("/File/"+filename);
if(!FileExists(path))
{
ResponseWrite("对不起!文件不存在!!");
return;
}
SystemIOFileInfo file = new SystemIOFileInfo(path);
string fileFilt="asp|aspx|php|jsp|ascx|config|asa|"; //不可下载的文件,务必要过滤干净
string fileName = fileName;
string fileExt = fileNameSubstring(filenameLastIndexOf(""))Trim()ToLower();
if(fileFiltIndexOf(fileExt)!=-1)
{
ResponseWrite("对不起!该类文件禁止下载!!");
}
else
{
ResponseClear();
ResponseAddHeader("Content-Disposition", "attachment; filename=" + HttpUtilityUrlEncode(fileName));
ResponseAddHeader("Content-Length", fileLengthToString());
ResponseContentType = GetContentType(HttpUtilityUrlEncode(fileExt));
ResponseWriteFile(fileFullName);
ResponseEnd();
}
}

/// <summary>
/// 获取下载类型
/// </summary>
/// <param name="fileExt"></param>
/// <returns></returns>
public string GetContentType(string fileExt)
{
string ContentType;
switch (fileExt)
{
case "asf":
ContentType = "video/x-ms-asf"; break;
case "avi":
ContentType = "video/avi"; break;
case "doc":
ContentType = "application/msword"; break;
case "zip":
ContentType = "application/zip"; break;
case "xls":
ContentType = "application/vndms-excel"; break;
case "gif":
ContentType = "image/gif"; break;
case "jpg":
ContentType = "image/jpeg"; break;
case "jpeg":
ContentType = "image/jpeg"; break;
case "wav":
ContentType = "audio/wav"; break;
case "mp3":
ContentType = "audio/mpeg3"; break;
case "mpg":
ContentType = "video/mpeg"; break;
case "mepg":
ContentType = "video/mpeg"; break;
case "rtf":
ContentType = "application/rtf"; break;
case "html":
ContentType = "text/html"; break;
case "htm":
ContentType = "text/html"; break;
case "txt":
ContentType = "text/plain"; break;
default:
ContentType = "application/octet-stream";
break;
}
return ContentType;
}

*如何获取现有文件的ContentType属性

/// <summary>
/// 获取现有文件的ContentType属性
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public string GetFileContentType(string filename)
{
string[] array = filenameSplit('');
string result = stringEmpty;
string suffix = "" + array[arrayLength - 1];
MicrosoftWinRegistryKey rg = MicrosoftWinRegistryClassesRootOpenSubKey(suffix);
object obj = rgGetValue("Content Type");
result = obj != null ? objToString() : stringEmpty;
rgClose();
return result;
}

以上就是本文的全部内容,希望对大家的学习有所帮助

 

参考文章:http://blog.ncmem.com/wordpress/2023/11/01/c%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8e%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd%e5%ae%9e%e4%be%8b/

欢迎入群一起讨论

 

 

标签:case,fileExt,ContentType,string,C#,break,实例,上传
From: https://www.cnblogs.com/songsu/p/17803441.html

相关文章

  • docker-compose 部署 emqx
    创建数据目录#mkdirdatalogsetc数据目录授权#chown1000data/logs/etc/docker-compose.yamlversion:'3'services:emqx1:image:emqx:5.3.0container_name:emqxrestart:alwaysenvironment:-TZ=Asia/Shanghaihealthcheck:......
  • 「直播回放」使用 PLC + OPC + TDengine,快速搭建烟草生产监测系统
    在烟草工业场景里,多数设备的自动控制都是通过PLC可编程逻辑控制器来实现的,PLC再将采集的数据汇聚至OPC服务器。传统的PISystem、实时数据库、组态软件等与OPC相连,提供分析、可视化、报警等功能,这类系统存在一些问题:收费是按照测点数进行的,价格昂贵,而且需要有商务谈判才......
  • 如何通过TypeScript采集高德图片
    相信大家开车一定都用过导航,高德地图就是一款非常优秀的导航软件,它以精准、高效而文明。今天我就给大家分享一个通过TypeScript简单采集高德图片的示例,可能没什么太大的用处,纯属个人爱好,不喜勿喷哈·~一起来看看吧。```typescriptimportsuperagentfrom'superagent';constprox......
  • 2021 CSPJ
     其实哪里需要模拟啊!!!这么简单的问题!!!是头猪也想得到#include<bits/stdc++.h>usingnamespacestd;constintmaxn=505;intmain(){ intn,l,r; cin>>n>>l>>r; if(l/n==r/n)cout<<r%n; elsecout<<n-1<<endl; return0;}【21CSPJ普及......
  • ThreadLocal原理
    从ThreadLocal的get和set方法入手publicvoidset(Tvalue){Threadt=Thread.currentThread();ThreadLocalMapmap=getMap(t);if(map!=null)map.set(this,value);elsecreateMap(t,value);}......
  • Redis通过复制rdb文件方式同步线上数据到本地以及提示:Can't handle RDB format versi
    场景Redis的持久化机制-RDB方式和AOF方式:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105052841Redis持久化机制导致服务自启动后恢复数据过长无法使用以及如何关闭:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130237326以上对于redis持久化......
  • startservice nc 2
    现这种情况一般是因为驱动路径发生改变了,注册表中存储了旧路径,因此找不到驱动。解决方法是删除注册表中这个位置下这个驱动的项:HKLM\SYSTEM\CurrentControlSet\Service\1驱动都会在这里创建一个键,把对应的那个驱动的键删掉,重启机器即可。......
  • Fluent UI System Icons 开源的图标集合
    软件介绍FluentUISystemIcons是由Microsoft开发的一个开源软件,它提供了一套丰富多样的系统图标,用于在应用程序和网站中使用。这些图标遵循FluentDesignSystem的设计原则,可用于增强用户界面的可视效果和交互性。功能特点1.丰富的系统图标库:FluentUISystemIcons提供......
  • vscode编译多文件后运行的配置
    在.vscode文件夹下创建launch.json并添加以下内容后,再把编译器地址修改成自己本地的即可{//使用IntelliSense了解相关属性。//悬停以查看现有属性的描述。//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","co......
  • Python使用selenium的Chrome下载文件报错解决
    Python使用selenium的Chrome下载文件报错:失败下载错误。网络不稳定也会引发该错误。咱们这里是因为路径多个反斜杠造成的。 下图是报错内容运行日志:路径代码:base_url="https://www.2ppt.com/"#采集的网址ASP.NET电子商务源码save_path="E:\\Spider\\PPT\\"去掉SaveP......