我可以使用multipart / form-data上传文件夹吗?

时间:2017-03-08 10:48:05

标签: asp.net web upload

我可以使用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上传文件夹吗?

2 个答案:

答案 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"

如果没有用户交互,浏览器将不允许任何脚本访问本地文件。

如果用户愿意将所有文件拖到浏览器中,或者使用其他程序上传文件,则可能会出现问题,但让浏览器向服务器发送文件夹超出了规范。

(在服务器端,是的,您可以选择接受指定路径的多个文件,但浏览器不会将这些文件发送给您,因此您需要在用户端使用专门编写的程序来发送文件。)