asp.net 一般处理程序接收上传文件的问题

在使用Html+ashx处理文件上传时,遇到上传文件超过4M的问题,首先HTML代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta charset="utf-8" />
</head>
<body>
    <div>
        单文件上传
        <form enctype="multipart/form-data" method="post" action="UpLoadHandler.ashx">
            <input type="file" name="files" />
            <input type="submit" value="上传" />
        </form>
    </div>

    <div>
        多文件上传
        <form enctype="multipart/form-data" method="post" action="UpLoadHandler.ashx">
            <input type="file" name="files" multiple />
            <input type="submit" value="上传" />
        </form>
    </div>
</body>
</html>
View Code

一般处理程序UpLoadHandler.ashx的代码如下:

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

namespace Zhong.Web
{
    /// <summary>
    /// UpLoadHandler 的摘要说明
    /// </summary>
    public class UpLoadHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //获取所有的上传文件
            //如果上传的文件超过了4M,则会报异常[超过了最大请求长度。],需要在Web.config配置
            HttpFileCollection hfc = context.Request.Files;
            //如果是hfc.Count为0,则可以认为是直接请求该ashx处理程序
            for (int i = 0; i < hfc.Count; i++)
            {
                HttpPostedFile hpf = hfc[i];
                if (hpf.ContentLength > 0)
                {
                    //大小限制
                    int maxSize = 2 * 1024 * 1024;  //最大是2M(转换为字节)
                    if (hpf.ContentLength > maxSize)
                    {
                        context.Response.Write("上传文件大小超出限制");
                        return;
                    }
                    //扩展名限制
                    string[] exts = { "image/jpg", "image/jpeg", "image/gif", "image/png" };
                    if (!exts.Contains(hpf.ContentType.ToLower()))
                    {
                        context.Response.Write("必须上传图片文件");
                        return; 
                    }
                    string fileName = Path.GetFileName(hpf.FileName);
                    hpf.SaveAs(context.Server.MapPath("~/UpLoad/" + fileName));
                }
            }

            ////获取指定name的文件上传
            ////该方式如果是html5的<input type="file" name="files" multiple />则始终是获取第一个上传的文件,multiple
            ////是支持多个文件上传,所以如果上传文件多于一个,则会丢失
            //HttpPostedFile hpf = context.Request.Files["files"];
            //if (hpf!= null && hpf.ContentLength > 0)
            //{
            //    hpf.SaveAs(context.Server.MapPath("~/UpLoad/" + Path.GetFileName(hpf.FileName)));
            //}
            context.Response.Write("上传成功");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
View Code

在上传一个超过4M的文件时,异常如下:

 

这时可以通过配置web.config修改文件上传的大小限制。

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
      <!--maxRequestLength的单位是kb,最大不能超过2097151 Kb即4GB,executionTimeout执行超时,单位是秒-->
      <httpRuntime maxRequestLength="2097151" executionTimeout="600"/>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>

</configuration>

此处增加了一行<httpRuntime maxRequestLength="2097151" executionTimeout="600"/>

 

转载于:https://www.cnblogs.com/godbell/p/7149841.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ASP.NET Core 中可以通过以下步骤上传文件: 1. 在视图中使用表单元素,设置 enctype 属性为 "multipart/form-data",例如: ```html <form method="post" enctype="multipart/form-data" action="/Upload/File"> <input type="file" name="file" /> <button type="submit">Upload</button> </form> ``` 2. 在控制器中接收上传的文件,使用 IFormFile 接口类型的参数,例如: ```csharp [HttpPost] public async Task<IActionResult> File(IFormFile file) { // 保存文件 using (var stream = new FileStream("path/to/file", FileMode.Create)) { await file.CopyToAsync(stream); } // 返回结果 return Ok("File uploaded successfully!"); } ``` 在以上代码中,使用了文件流将上传的文件保存到指定路径,并返回了一个成功上传的信息。 需要注意的是,如果需要上传多个文件,可以使用 IFormFileCollection 接口类型的参数,例如: ```csharp [HttpPost] public async Task<IActionResult> Files(IFormFileCollection files) { foreach (var file in files) { // 保存文件 using (var stream = new FileStream("path/to/file", FileMode.Create)) { await file.CopyToAsync(stream); } } // 返回结果 return Ok("Files uploaded successfully!"); } ``` 在以上代码中,使用了 foreach 循环遍历所有上传的文件,并将它们保存到指定路径。 ### 回答2: 在ASP.NET Core中,可以通过以下几个步骤来访问上传的文件: 1. 在控制器的方法中接收上传的文件,通过使用 [FromForm] 或 [FromFiles] 特性来绑定上传的文件。例如: ```csharp [HttpPost] public IActionResult UploadFile(IFormFile file) { // 处理上传的文件 return Ok(); } ``` 2. 为了确保能够处理大文件上传,需要在Startup.cs文件的ConfigureServices方法中,添加以下配置: ```csharp services.Configure<IISServerOptions>(options => { options.MaxRequestBodySize = int.MaxValue; }); services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = int.MaxValue; }); ``` 3. 通过使用IFormFile接口提供的方法和属性,即可获取到文件的相关信息和内容。例如,使用FileName属性获取到文件名; 使用CopyToAsync方法将文件保存到指定的路径,如: ```csharp [HttpPost] public async Task<IActionResult> UploadFile(IFormFile file) { var fileName = file.FileName; var filePath = Path.Combine(Directory.GetCurrentDirectory(), "uploads", fileName); using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } return Ok(); } ``` 以上是基本的文件上传访问步骤,可以根据实际需求对文件进行进一步的处理和存储。同时,还可以通过使用扩展方法来处理多个上传文件的情况,或者使用第三方库来简化文件上传的过程。 ### 回答3: 在ASP.NET Core中,可以使用IFormFile接口来访问上传的文件。 首先,您需要在Controller的方法中使用参数绑定来接收上传的文件。使用参数类型为IFormFile的参数来接收单个文件,或者使用参数类型为IFormFileCollection的参数来接收多个文件。 例如,您可以在Controller的方法中添加以下代码来接收用户上传的单个文件: ```csharp [HttpPost] public IActionResult UploadFile(IFormFile file) { // 检查文件是否为空 if (file == null || file.Length == 0) { return BadRequest("文件不能为空"); } // 处理上传的文件 // ... return Ok("文件上传成功"); } ``` 如果用户可以上传多个文件,您可以使用IFormFileCollection参数类型来接收这些文件: ```csharp [HttpPost] public IActionResult UploadFiles(IFormFileCollection files) { // 检查文件是否为空 if (files == null || files.Count == 0) { return BadRequest("请选择文件"); } // 处理上传的文件 foreach (var file in files) { // ... } return Ok("文件上传成功"); } ``` 接收到上传的文件之后,您可以对它们进行各种操作,例如保存到本地磁盘、读取文件内容等,具体操作取决于您的需求。 需要注意的是,在使用这些方法之前,您需要先在ASP.NET Core应用程序中添加相应的依赖包(例如Microsoft.AspNetCore.Http)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值