C#简单实现文件上传功能
作者:lijiao 发布时间:2022-10-03 17:29:41
标签:C#,文件上传
最近项目上的一个上传文件功能,项目是MVC+EF+LigerUI 来做的,贴出来大家一起分享下
1、页面需要引用这个JS 和 CSS
<script type="text/javascript" src="/Content/uploadify/jquery.uploadify.min.js"></script>
<link href="/Content/uploadify/uploadify.css" type="text/css" rel="stylesheet" />
2、页面添加Upload.ashx
3、代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.Security;
namespace AL.Web {
/// <summary>
/// Upload 的摘要说明
/// </summary>
public class Upload : IHttpHandler {
public void ProcessRequest(HttpContext context) {
context.Response.ContentType = "text/plain";
//context.Response.Write("Hello World");
string r = "";
//此处有时候穿过来的sn后面还有一些乱七八糟的字符,没研究什么意思,就判断一下,截取一下就完事了,小项目~
string sn = context.Request.QueryString["sn"];
if (sn != null && sn.Length > 14) sn = sn.Substring(0, 14);
if (context.User.Identity.IsAuthenticated == false) {
// 未登录用户
}
try {
//获取上传的文件数据
HttpPostedFile file = context.Request.Files["Filedata"];
string fileName = file.FileName;
string fileType = Path.GetExtension(fileName).ToLower();
//由于不同浏览器取出的FileName不同(有的是文件绝对路径,有的是只有文件名),故要进行处理
if (fileName.IndexOf(' ') > -1) {
fileName = fileName.Substring(fileName.LastIndexOf(' ') + 1);
} else if (fileName.IndexOf('/') > -1) {
fileName = fileName.Substring(fileName.LastIndexOf('/') + 1);
}
//上传的目录
string uploadDir = "~/Content/uploadfile/TMP/" + System.DateTime.Now.ToString("yyyyMM") + "/";
//上传的路径
//生成年月文件夹及日文件夹
if (Directory.Exists(context.Server.MapPath(uploadDir)) == false) {
Directory.CreateDirectory(context.Server.MapPath(uploadDir));
}
if (Directory.Exists(context.Server.MapPath(uploadDir + System.DateTime.Now.ToString("dd") + "/")) == false) {
Directory.CreateDirectory(context.Server.MapPath(uploadDir + System.DateTime.Now.ToString("dd") + "/"));
}
uploadDir = uploadDir + System.DateTime.Now.ToString("dd") + "/";
string uploadPath = uploadDir + FormsAuthentication.HashPasswordForStoringInConfigFile(fileName, "MD5").Substring(0, 8) + fileType;
//保存文件
file.SaveAs(context.Server.MapPath(uploadPath));
//下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失
//DbHelperOleDb.ExecuteSql("insert into [temp](temp_sn,temp_Content) values('" + sn + "','" + uploadPath + "')");
//Response.Write("1");
//context.Response.Write("{'IsError':false, 'Data':'" + uploadPath + "'}");
r = "{'IsError':false, 'Data':'" + uploadPath + "'}";
} catch (Exception ex) {
//Response.Write("0");
//throw ex;
//context.Response.Write("{IsError: true, data:'" + ex.Message + "'}");
r = "{'IsError':true, 'Data':'" + ex.Message + "'}";
} finally {
r = r.Replace("'", "\"");
context.Response.Write(r);
context.Response.End();
}
}
public bool IsReusable {
get {
return false;
}
}
}
}
页面前台处理如下图:
#FilesUrl 是一个文本框,将上传文件的路径赋值进去,将地址存入数据库,后续直接根据地址可以下载查看。


猜你喜欢
- 最近,在使用spring cloud框架时,发现feign也能实现三方请求,而且实现很简单,请求接口的结构很清晰,便果断学习一波。记录一下。
- Bean的生命周期解释(1)BeanFactoryPostProcessor的postProcessorBeanFactory()方法:若某
- 近来复习数据结构,自己动手实现了栈。栈是一种限制插入和删除只能在一个位置上的表。最基本的操作是进栈和出栈,因此,又被叫作“先进后出”表。首先
- springboot对压缩请求的处理最近对接银联需求,为了节省带宽,需要对报文进行压缩处理。但是使用springboot自带的压缩设置不起作
- 今天一上班 被github上的一篇名为《教你用python玩跳一跳》吸引,它的星也瞬间从3400涨到4400 原作者主要就是用py
- 假设你已经装了texlive打开cmd输入latex --version应该能输出打开vscode,安装这几个插件设置->Settin
- 这篇文章主要介绍了Springboot配置文件内容加密代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 在之前的博客使用SpringMVC创建Web工程并使用SpringSecurity进行权限控制的详细配置方法 中,我们描述了如何配置一个基于
- 集合>队列Queue>创建队列System.Collections.Queue类提供了四种重载构造函数。using System
- 基础知识介绍: @RequestBody主要用来接收前端传递给后端的json字符串中的
- 新版的IDEA为了防止 pom 更新时,MAVEN 自动导包时卡死的问题,取消了自动导包机制。但新增了导入按钮和快捷键。 问题id
- 1.简介学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识。2.编写过程编写这个游戏,一共经历了三个阶段,编写了三个版
- 本文实例为大家分享了java实现银行家算法的具体代码,供大家参考,具体内容如下题目:初始时,Allocate[i,j]=0,表示初始时没有进
- 这篇文章主要介绍了Spring Boot2.X国际化文件编写配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 本文主要从两个方面对Android Volley框架的使用方法进行讲解,具体内容如下一、网络请求1.get方式请求数据// 1 创建一个请求
- 一. 简介 SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLit
- Android 属性动画ValueAnimator与插值器详解一、ValueAnimator详解:ValueAnimator是整个动画的核心
- Nacos简介Nacos 英文全称为 Dynamic Naming and Configuration Service,是一个由阿里巴巴团队
- 一、效果 点击开始: 点击停止: 二、在MainActivity中import android.graphics.P
- 1 前言在前文中,已经讲述了 AOP 的后置处理器使用和方法,在本文中继续分享增强信息相关的源码,这里才是 AOP 的核心代码。2 spri