asp.net 上传多文件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 上传多文件问题相关的知识,希望对你有一定的参考价值。

asp.net 的fileupload控件一般点击浏览按钮以后只能选择一个文件,
请问能否支持多选?如何实现多选?请高手指点.

fileupload控件只能上传一个文件,这一点是肯定的,
另外楼上给你的建议也是比较客观的
如果你非要一次性上传多个文件的话,
需要下载一些支持该功能的插件,.NET本身是没有这样的控件的追问

请问支持这样功能的插件叫什么名字?能不能发个地址我?感激不尽

追答

http://apps.hi.baidu.com/share/detail/15914266

参考技术A 给你些建议哦:
1.多文件上传没有必要动态添加FileUpLoad,因为这种工作并没有带来多大的收益,因为你完全可以放置4个到5个FileUpLoad控件,用户上传一般不会很多,假如超过5个也可以分多次上传。
2.如果想动态添加,你首先要判断用户还是否有下个文件上传,所以你必须添加一个BUTTON或者LABEL来让用户确认,比如:“上传下一个文件”,用户点击的事件里写:
FileUpLoad FUL = new FileUpLoad();
FUL.Name = "FUL" + Convet.ToString(i);//这个i是你要定义的全局变量,用于记录用户在同一次上传中点击了几次控件。点一次自加1,初始为0
this.Controls.Add(FUL);
i++;
获得路径就通过这个i,写个循环来获得,

ASP.NET WebApi:如何使用 WebApi HttpClient 通过文件上传执行多部分发布

【中文标题】ASP.NET WebApi:如何使用 WebApi HttpClient 通过文件上传执行多部分发布【英文标题】:ASP.NET WebApi: how to perform a multipart post with file upload using WebApi HttpClient 【发布时间】:2012-05-07 13:36:21 【问题描述】:

我有一个 WebApi 服务处理从简单表单上传的内容,例如:

    <form action="/api/workitems" enctype="multipart/form-data" method="post">
        <input type="hidden" name="type" value="ExtractText" />
        <input type="file" name="FileForUpload" />
        <input type="submit" value="Run test" />
    </form>

但是,我不知道如何使用 HttpClient API 模拟相同的帖子。 FormUrlEncodedContent 位很简单,但是如何在帖子中添加带有名称的文件内容呢?

【问题讨论】:

您介意在 WebApi 端分享使用 MultipartFormDataContent 的代码吗? 在答案***.com/a/59308653/5333683中将参数作为multipear dotnet 3.0 发送示例 【参考方案1】:

感谢@Michael Tepper 的回答。

我必须将附件发布到 MailGun(电子邮件提供商),并且我必须对其稍作修改,以便它接受我的附件。

var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
fileContent.Headers.ContentDisposition = 
        new ContentDispositionHeaderValue("form-data") //<- 'form-data' instead of 'attachment'

    Name = "attachment", // <- included line...
    FileName = "Foo.txt",
;
multipartFormDataContent.Add(fileContent);

此处以供将来参考。谢谢。

【讨论】:

【参考方案2】:

经过多次试验和错误,下面是实际工作的代码:

using (var client = new HttpClient())

    using (var content = new MultipartFormDataContent())
    
        var values = new[]
        
            new KeyValuePair<string, string>("Foo", "Bar"),
            new KeyValuePair<string, string>("More", "Less"),
        ;

        foreach (var keyValuePair in values)
        
            content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
        

        var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        
            FileName = "Foo.txt"
        ;
        content.Add(fileContent);

        var requestUri = "/api/action";
        var result = client.PostAsync(requestUri, content).Result;
    

【讨论】:

对大文件使用 StreamContent: var fileContent = new StreamContent(File.OpenRead(fileName)); 哇——我遇到了一个完全不同的问题,但仍然需要发布内容。我能够进行修改以满足我的需要。非常感谢!! 奇怪的是这对我不起作用。我必须在内容名称周围添加引号,请参见:***.com/questions/15638622/… 仅供参考,System.Net.Mime.DispositionTypeNames 下有一个“附件”常量 我也必须在名称值周围添加引号:FileName = "\"TestImage.jpg\""。我在服务器上使用 ServiceStack 而不是 WebAPI 不确定这是否相关。【参考方案3】:

你需要寻找HttpContent的各种子类。

您创建了一个多格式的 http 内容并向其添加不同的部分。在您的情况下,您有一个字节数组内容和表单 url 编码 沿行

HttpClient c = new HttpClient();
var fileContent = new ByteArrayContent(new byte[100]);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                                            
                                                FileName = "myFilename.txt"
                                            ;

var formData = new FormUrlEncodedContent(new[]
                                            
                                                new KeyValuePair<string, string>("name", "ali"),
                                                new KeyValuePair<string, string>("title", "ostad")
                                            );


MultipartContent content = new MultipartContent();
content.Add(formData);
content.Add(fileContent);
c.PostAsync(myUrl, content);

【讨论】:

不幸的是,这不起作用,尽管ContentDisposition 标头似乎让我向前迈了一步。如果我按原样使用您的示例代码,我会收到 Unsupported Media Type 异常。但是,如果我用MultipartFormDataContent 替换MultipartContent,异常就会消失。但是,在服务器上,隐藏字段的值丢失了。 @MichaelTeper 我没有测试过代码。我会稍微玩一下并更新帖子,但我的意思是向您展示您需要查找的内容的 sn-p,而不是工作代码。 我刚收到StatusCode: 415, ReasonPhrase: 'Unsupported Media Type'

以上是关于asp.net 上传多文件问题的主要内容,如果未能解决你的问题,请参考以下文章

asp.net用多线程上传大文件(500MB~2G)

在 ASP.NET 4.0 环境下使用 c# 进行多文件上传

ASP.NET WebApi:如何使用 WebApi HttpClient 通过文件上传执行多部分发布

ASP.Net如何用FileUpLoad实现多文件上传

如何在 ASP.NET MVC 中处理 HTML5 多文件上传?

asp.net 一般处理程序(ashx)如何多次接收上传文件(多文件批量上传)