我可以使用multipart/form-data
上传文件,但我无法找到有关multipart/form-data
上传文件夹的任何教程。
这是我的代码上传文件:
HTML:
<form name="form1" method="post" enctype="multipart/form-data" action="api/upload">
<fieldset>
<legend>File Upload Example</legend>
<div>
<label for="caption">Image Caption</label>
<input name="caption" type="text" />
</div>
<div>
<label for="image1">Image File</label>
<input name="image1" type="file" />
</div>
<div>
<input type="submit" value="Submit" />
</div>
</fieldset>
</form>
控制器:
public class UploadController : ApiController
{
[AcceptVerbs("GET", "POST")]
public async Task<HttpResponseMessage> PostFile()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
StringBuilder sb = new StringBuilder(); // Holds the response body
// Read the form data and return an async task.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names for uploaded files.
foreach (var file in provider.FileData)
{
var originalFile = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"'); ;
FileInfo fileInfo = new FileInfo(file.LocalFileName);
fileInfo.CopyTo(Path.Combine(root, originalFile), true);
sb.Append(string.Format("Uploaded file: {0} ({1} bytes)\n", originalFile, fileInfo.Length));
fileInfo.Delete();
}
return new HttpResponseMessage()
{
Content = new StringContent(sb.ToString())
};
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}
我可以使用multipart/form-data
上传文件夹吗?
答案 0 :(得分:0)
很遗憾,您无法上传文件夹,因为它不符合规范。 但是你不能尝试这个代码。
客户端
// using ASP Logic
// create folder in your server
// put uploaded files to the created folder
// save files info and captions to DB
服务器端
nsmap
关于图片标题,请看一下。 Html/PHP - Form - Input as array
答案 1 :(得分:0)
如果您的问题是“浏览器中的用户是否有办法选择单个文件夹,并让浏览器上传其中的所有文件”,则答案因浏览器而异。
标准没有描述将文件夹内容上传到form
的{{1}}控件的方法。浏览器的支持各不相同:
Google Chrome, which supports folder upload as per this question。
Firefox may be able to do something via drag-n-drop
MS Edge browser support is "in development"
如果没有用户交互,浏览器将不允许任何脚本访问本地文件。
如果用户愿意将所有文件拖到浏览器中,或者使用其他程序上传文件,则可能会出现问题,但让浏览器向服务器发送文件夹超出了规范。
(在服务器端,是的,您可以选择接受指定路径的多个文件,但浏览器不会将这些文件发送给您,因此您需要在用户端使用专门编写的程序来发送文件。)