.net文件上传、下载

/// <summary>
        /// 上传文件
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Upload()
        {
            //调用页面的上传控件,实现文件的上传
            var file = Request.Files[0];
            var id = Request["id"] ?? ""; //如果是重新上传的话,会有id
            var type = Request["type"] ?? ""; //主文件没有type,照片卷的照片标签、图纸卷的图纸备考表、拓片及摹本的登记表、电子文件卷的光盘标签,这几类辅助文件会有type
            if ((file != null) && (file.ContentLength > 0))
            {
                string uploadfilename = file.FileName; //用户上传的原始文件名,数据库中也要存储,用于用户下载的时候重命名
                string extention = uploadfilename.Substring(uploadfilename.LastIndexOf(".")).ToLower();
                string saveFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + extention;
                string path = Server.MapPath("~/Upload/SYZL/Doc/");//取得上传的目标文件夹
                string filePath = path + saveFileName;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                file.SaveAs(Path.Combine(path, saveFileName));  //上传文件
                if ((extention == ".pdf") || (extention == ".doc") || (extention == ".docx") || (extention == ".xls") || (extention == ".xlsx") || (extention == ".ppt") || (extention == ".pptx"))
                {
                    //在完成pdf,office格式文档上传之后,进行文档格式的转换,以便使用flexpaper在线预览
                    ConvertFileFormat(saveFileName);
                    /*
                    var workingThread = new Thread(ConvertFileFormat);
                    workingThread.Start(saveFileName);
                     */
                }
                //更新数据库记录,新增数据库记录的操作不在这里做,在提交表单的时候做,原始文件名和保存文件名已经返回给表单
                if (id != "") //id不为空,是重新上传文件动作,需要更新主键为id的数据库记录
                {
                    var syxxxq = db.T_SYXXXQ.Find(Int32.Parse(id));
                    if (syxxxq != null)
                    {
                        //判断type是否为空,如果type为空,则为主文件,否则,则为辅文件
                        if (type != "")
                        {
                            var ajdhqlw = syxxxq.SYXXZLLXBH.Trim(); //案卷档号前两位
                            //如果老文件存在,则删除老文件
                            DeleteOldFile(syxxxq.LJWJMC);
                            //更新图纸卷的"图纸备考表原始上传文件名":TZBKBYSM,"图纸备考表保存文件名":TZBKBBCM
                            syxxxq.NRBT = uploadfilename; //原始文件名
                            syxxxq.LJWJMC = saveFileName;   //保存文件名
                            db.Entry(syxxxq).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        else
                        {
                            //如果老文件存在,则删除老文件
                            DeleteOldFile(syxxxq.NRBT);
                            //上传的是主文件,更新主文件数据库记录
                            syxxxq.NRBT = uploadfilename; //原始文件名
                            syxxxq.LJWJMC = saveFileName;   //保存文件名
                            syxxxq.WJLX = GetFileTypeByExtention(extention);
                            syxxxq.ADDSJ = DateTime.Now;
                            db.Entry(syxxxq).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                    }
                }
                //返回保存文件名,原始文件名
                return Content("{\"NRBT\":\"" + uploadfilename + "\",\"LJWJMC\":\"" + saveFileName + "\",\"WJLJ\":\"" + filePath + "\",\"WJLX\":\"" + GetFileTypeByExtention(extention) + "\"}");
            }
            return Content("0");
        }

上传

 1 public string downloadFile()
 2         {
 3             string id = Request["id"] ?? "";
 4             if (!string.IsNullOrEmpty(id))
 5             {
 6                 var syxxxq = db.T_SYXXXQ.Find(Int32.Parse(id));
 7                 string path = Server.MapPath("~/Upload/SYZL/Doc/");//取得上传的目标文件夹
 8                 string fileName = syxxxq.LJWJMC;//保存的路径文件名
 9                 string khdFileName = syxxxq.NRBT;//客户端文件名
10                 string filePath = path + fileName;//服务器上保存的路径
11                 var fileInfo = new FileInfo(filePath);
12                 if (fileInfo.Exists == true)
13                 {
14                     #region 未测试的另一种下载方法
15                     //FileInfo fi = new FileInfo(fileName);
16                     //Response.Clear();
17                     //Response.ClearHeaders();
18                     //Response.Buffer = true;
19                     //Response.Charset = "GB2312";
20
21                     ////添加头信息,为 "文件下载/另存为 "对话框指定默认文件名
22                     //Response.AppendHeader("Content-Disposition", "attachment;filename="
23                     //    + HttpUtility.UrlEncode(Path.GetFileName(filePath),
24                     //    System.Text.Encoding.UTF8));
25                     //Response.AppendHeader("Content-Length", fi.Length.ToString());
26                     //Response.ContentType = "application/octet-stream";
27                     //Response.Filter.Close();
28                     //Response.WriteFile(filePath);
29                     //Response.Flush();
30                     //Response.End();
31                     #endregion
32                     const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
33                     byte[] buffer = new byte[ChunkSize];
34
35                     Response.Clear();
36                     var iStream = System.IO.File.OpenRead(filePath);
37                     long dataLengthToRead = iStream.Length;//获取下载的文件总大小
38                     Response.ContentType = "application/octet-stream";
39                     Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
40                     while (dataLengthToRead > 0 && Response.IsClientConnected)
41                     {
42                         int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
43                         Response.OutputStream.Write(buffer, 0, lengthRead);
44                         Response.Flush();
45                         dataLengthToRead = dataLengthToRead - lengthRead;
46                     }
47                     Response.Close();
48                 }
49             }
50             return "下载的文件不存在!";
51         }

下载

思路、参考。

时间: 2024-10-12 08:27:35

.net文件上传、下载的相关文章

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

使用Paramiko实现SSH登陆,文件上传下载

1,SSh登陆命令行实现: #!/usr/bin/env python # encoding: utf-8 import paramiko private_key_path = '/Users/aolens/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.Aut

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

文件上传下载

1.文件上传 文件上传下载本质是通过Socket的字节流来传输数据的.所以,对于文件上传,我们可以从HttpRequest对象获取输入流,进而获取上传文件的内容.但是采用ServletAPI并不能获取获取对应文件的字节流,而是获取整个Socket的字节流,里面包括提交的参数.上传文件内容以及其他附加信息. Servlet API上传文件,代码如下 protected void doPost(HttpServletRequest request, HttpServletResponse respo

Hadoop之HDFS原理及文件上传下载源码分析(下)

上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文件上传.下载源解析. 文件上传 先上文件上传的方法调用过程时序图: 其主要执行过程: FileSystem初始化,Client拿到NameNodeRpcServer代理对象,建立与NameNode的RPC通信(楼主上篇已经介绍过了) 调用FileSystem的create()方法,由于实现类为Dis

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload 咨询qq:286275658 演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 服务器端运行效果图: 服务器端配置文件: <?xml version="1.

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V

.Net Core 图片文件上传下载

当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. 一.开发环境 毋庸置疑,宇宙第一IDE VisualStudio 2017 二.项目结构 FilesController 文件上传下载控制器 PictureController 图片上传下载控制器 Return_Helper_DG 返回值帮助类 三.关键代码 1.首先我们来看Startup.cs

ssh框架文件上传下载

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Author" content="BuNuo"> <meta name="Keywords" content="文件上传下载"> <meta name="

SpringMVC文件上传下载

在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/qixiaoyizhan/p/5819392.html 今天我们来讲讲spring mvc中的文件上传和下载的几种方法. 首先附上文件目录->我们需要配置的我做了记号-> 一.文件上传 首先为了方便后续的操作,以及精简代码,我们在Utils包下封装一个文件上传下载的帮助类: Files_Helper