松鼠的博客

导航

.net c# 文件的上传和下载

1.文件的上传:

string pubFileName = "";
string pubFilePath = "";
if (this.FileUpload1.HasFile)
{
int i = this.FileUpload1.PostedFile.ContentLength;
if (this.FileUpload1.PostedFile.ContentLength > 10485760)
{
Response.Write("<script>alert('10M以下')</script>");
return;
}
pubFileName = this.FileUpload1.FileName;
pubFilePath = Server.MapPath("~/") + "\\psfile_res\\";
this.FileUpload1.PostedFile.SaveAs(pubFilePath + "" + pubFileName);
}

string resTypeName = this.DropDownList_resType.SelectedValue.Trim();
string depName = this.DropDownList_depName.SelectedValue.Trim();
string pubFilePID = this.pre_username;
string pubDate = DateTime.Now.ToString("yyyy-MM-dd");
int loadCount=0;

Maticsoft.Model.t_pubFile model=new Maticsoft.Model.t_pubFile();
model.pubFileName=pubFileName;
model.resTypeName=resTypeName;
model.depName=depName;
model.pubFilePID=pubFilePID;
model.pubDate=pubDate;
model.pubFilePath=pubFilePath;
model.loadCount=loadCount;

Maticsoft.BLL.t_pubFile bll=new Maticsoft.BLL.t_pubFile();
bll.Add(model);
Maticsoft.Common.MessageBox.ShowAndRedirect(this,"上传成功!","add.aspx");


2.文件的下载:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;

namespace MCS.ZB.PetrochinaSupport.Common
{
public class FileDownload
{

/// <summary>
/// 输出硬盘文件,提供下载 支持大文件、续传、速度限制、资源占用小
/// </summary>
/// <param name="_Request">Page.Request对象</param>
/// <param name="_Response">Page.Response对象</param>
/// <param name="_fileName">下载文件名</param>
/// <param name="_fullPath">带文件名下载路径</param>
/// <param name="_speed">每秒允许下载的字节数</param>
/// <returns>返回是否成功</returns>
//---------------------------------------------------------------------
//调用:
// string FullPath=Server.MapPath("count.txt");
// ResponseFile(this.Request,this.Response,"count.txt",FullPath,100);
//---------------------------------------------------------------------
public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;

long fileLength = myFile.Length;
long startBytes = 0;
int pack = 10240; //10K bytes
int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1;

if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}

_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1;

for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i = maxCount;
}
}
}
catch (Exception e)
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}


}
}

 

参考文章:http://blog.ncmem.com/wordpress/2023/11/01/net-c-%e6%96%87%e4%bb%b6%e7%9a%84%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd/

欢迎入群一起讨论

 

 

posted on 2023-11-01 17:54  Xproer-松鼠  阅读(92)  评论(0编辑  收藏  举报