关于ASP.NET中上传大文件的问题

shiyi889 2012-03-14 11:10:55
在网络上我找到很多种方式 。例如使用activex,httpworkrequest等,但是我不怎么看得懂,使用组件,我不知如何处理,但是用httpworkrequest对文件进行分块处理,我更是云里雾里。有那位能够给我详细讲解一下任意一个可以上传较大的文件的方式(超过100M),不要那种设置web.config的标签来上传的。谢谢
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziyouli 2012-03-15
  • 打赏
  • 举报
回复
400M以内的FileUpLoad控件可以直接搞定
冰镇宝贝321 2012-03-15
  • 打赏
  • 举报
回复
HttpPostedFile oFile = Request.Files["NewFile"];

// Check if the file has been correctly uploaded
if (oFile == null || oFile.ContentLength == 0 || !(Convert.ToInt32(HttpContext.GetGlobalResourceObject("SystemInfo", "OpenFileup")) == 1))
{
SendResults(202);
return;
}

int iErrorNumber = 0;
string sFileUrl = "";

// Get the uploaded file name.
string sFileName = System.IO.Path.GetFileName(oFile.FileName).Substring(System.IO.Path.GetFileName(oFile.FileName).LastIndexOf(".") + 1).ToLower();
string TypeName = HttpContext.GetGlobalResourceObject("SystemInfo", "UpfileTypeSettings").ToString();

if (!TypeName.Contains(sFileName) ||
oFile.ContentLength >= Convert.ToInt32(HttpContext.GetGlobalResourceObject("SystemInfo", "MaxFileLengthSettingsKB")) * 1024)
//文件类型判断 文件大小验证
{
SendResults(202);
return;
}



int iCounter = 0;

while (true)
{
//判断文件是否可以上传
if (CheckUploadFileExtension(sFileName))
{
string sFilePath = System.IO.Path.Combine(this.UserFilesDirectory, sFileName);

if (System.IO.File.Exists(sFilePath))
{
iCounter++;
sFileName =
System.IO.Path.GetFileNameWithoutExtension(oFile.FileName) +
"(" + iCounter + ")" +
System.IO.Path.GetExtension(oFile.FileName);

iErrorNumber = 201;
}
else
{
if (TypeName.Contains(".gif") || TypeName.Contains(".jpg") || TypeName.Contains("bmp") || TypeName.Contains("png"))
{
System.Drawing.Image image = System.Drawing.Image.FromStream(oFile.InputStream);

int width = image.Width;
int height = image.Height;

int max = Convert.ToInt32(HttpContext.GetGlobalResourceObject("SystemInfo", "ImageMaxWidth"));
if (width > max)
{
try
{
System.Drawing.Image newPic; //定义新位图对象
//String picPath = path + userID + time + fileExtension;
if (width > height)
{
newPic = new Bitmap(image, max, height * max / width); //缩放
}
else
{
newPic = new Bitmap(image, width * max / height, max); //缩放
}
newPic.Save(sFilePath, System.Drawing.Imaging.ImageFormat.Bmp); //将处理后的图片保存成bmp文件
sFileUrl = this.UserFilesPath + sFileName;
break;
}
catch
{
}
}
}

oFile.SaveAs(sFilePath);
sFileUrl = this.UserFilesPath + sFileName;
break;
}
}
else
{
//不允许上传
SendResults(202);
break;
}
}

SendResults(iErrorNumber, sFileUrl, sFileName);
冰镇宝贝321 2012-03-15
  • 打赏
  • 举报
回复
/// <summary>
/// 在上传文件时同时将数据存入数据库所做的事务操作,返回是否操作成功
/// </summary>
/// <param name="cmdText">insert命令</param>
/// <param name="myParams">sql参数数组</param>
/// <param name="file">文件上传组件</param>
/// <param name="fileName">保存的文件名</param>
protected bool RunTranscation(string cmdText, OleDbParameter[] myParams, FileUpload file,string fileName)
{
string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["McmConnection"].ToString();//连接数据库字符串
OleDbConnection conn = new OleDbConnection(connectionString);//新建连接
conn.Open();//打开连接
OleDbTransaction otran = conn.BeginTransaction();//开启事务
OleDbCommand cmd = new OleDbCommand(cmdText, conn);//创建命令
cmd.Transaction = otran;//设置命令的事物为otran

int result = 0;//判断插入数据库是否成功

//为cmd添加参数
foreach (OleDbParameter param in myParams)
{
cmd.Parameters.Add(param);
}

try
{
result=cmd.ExecuteNonQuery();//执行插入操作
if (result == 1)//如果插入成功
{
//string fileName = file.FileName;//文件名
//string sNewFileName = DateTime.Now.ToString("yyyyMMddhhmmsfff");//以时间来重命名图片
//string sExtension = file.FileName.Substring(file.FileName.LastIndexOf('.'));//图片的后缀名
//file.SaveAs(uploadPath + sNewFileName + sExtension);//保存图片文件
//string filePath = "../Uploads/" + folderName + "/" + sNewFileName + sExtension;//上传到Uploads文件夹的不同的文件夹下


file_pastPaper.SaveAs(Server.MapPath("../"+fileName));//上传到文件夹中
otran.Commit();//提交事务
return true;
}
otran.Rollback();//回滚事务,操作失败
}
catch (Exception se)
{
//Response.Write("<script>alert('"+se.Message+"')</script>");\
//Response.Write("<script>alert('"+se.Message.ToString()+"')</script>");
otran.Rollback();//回滚事务
return false;
}
finally
{
conn.Close();
}

return false;
}






子夜__ 2012-03-15
  • 打赏
  • 举报
回复
可考虑断点续传。IIS也要配置。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧