asp.net 上传多文件问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net 上传多文件问题相关的知识,希望对你有一定的参考价值。
asp.net 的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 4.0 环境下使用 c# 进行多文件上传
ASP.NET WebApi:如何使用 WebApi HttpClient 通过文件上传执行多部分发布