.net c# 提交包含文件file 的form表单 获得文件的Stream流

1.前台html代码  

    要写一个有id的form,可是不能有runat="server"属性。由于一个页面中,有这个属性的form表单仅仅能有一个。

再要有一个有name的iframe,要设置它的样式为不显示。即display为none。

使用iframe的优点是。提交该表单,

不会刷新页面,仅仅会刷新这个不可见的iframe。

    把form表单的target设置为iframe的name值,form表单的 action设置为表单要提交到的处理程序。

这个处理程序中。会接收到form表单中全部有name属性的控件的值,包括文件:

<input type="file" name="uploadfile" id="uploadfile" />

    WebForm的文件要想上传到server端,不能用.net本身的FileUpLoad控件,貌似是由于会遇到权限问题。无法解析。

所以,用本文所用的以表单的形式post过去,再在接收端用C#代码: 
var file = context.Request.Files[0]; var stream = file.InputStream;来获得文件和文件流。


 <form id="fileInfo" enctype="multipart/form-data" target="screct_frame" method="POST" action="../../Handlers/needsPlanCreateHandler.ashx?sign=readExcel">
    
     <input type="file" name="uploadfile" id="uploadfile" />
     <button class="btn btn-default" type="submit" >确定</button>                                        
                                       
 </form>
 <iframe name="screct_frame" style="display: none;"></iframe>
 
2.一般处理程序代码,即上面form所提交到的action端的处理代码
private void ReadExcel(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            try
            {
                var file = context.Request.Files[0];
                if (file.FileName == "")
                {
                    context.Response.Write("<script>parent.callback('请先导入文件');</script>");
                }
                var stream = file.InputStream;
                //这里能够对文件流做些什么
                
            }
            catch (Exception ex)
            {
                context.Response.Write("<script>parent.callback(" + ex.ToString() + ");</script>");
            }
        }
说明:上面的parent.callback()这种方法, callback()是iframe所在的页面定义的js方法,前面使用parent时由于。

当前提交的是在iframe中,使用parent能够获得页面对象,iframe能够通过parent或top来找到父级页面,

能够运行父级页面的js脚本。

.NET Core中使用API进行文件上传可以通过以下步骤完成: 1. 首先,创建一个API控制器或一个接受文件上传的动作方法。通过在方法参数中使用[FormFile]属性来声明接收文件的参数。例如: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { // 代码逻辑... } ``` 2. 在控制器或方法中,可以使用`FileStream`或`MemoryStream`等操作来处理上传的文件。例如,将文件保存到服务器上的特定位置: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { if (file != null && file.Length > 0) { using (var stream = new FileStream("<目标文件路径>", FileMode.Create)) { await file.CopyToAsync(stream); } } return Ok(); } ``` 3. 如果您需要对文件进行验证,可以使用文件的属性,如文件名、大小、类型等。例如: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { if (file != null && file.Length > 0) { // 验证文件属性 if (file.Length > 10 * 1024 * 1024) { return BadRequest("文件大小不能超过10MB。"); } // 验证文件类型 if (!IsFileSupported(file)) { return BadRequest("不支持的文件类型。"); } // 文件保存逻辑... } return Ok(); } private bool IsFileSupported(IFormFile file) { // 检查文件类型的逻辑,可以根据需要自定义 // 例如:return file.ContentType.StartsWith("image/"); } ``` 4. 最后,通过发送POST请求,将文件作为表单数据通过multipart/form-data编码进行上传。您可以选择使用工具,例如Postman,或通过前端页面实现此操作。 以上是使用.NET Core API进行文件上传的基本步骤,您可以根据需要进行进一步的自定义和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值