asp.net-mvc - ASP.NET Web API 文件保存为 "BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af"

标签 asp.net-mvc file http asp.net-web-api multipartform-data

我正在使用 ASP.NET Web API 上传文件。我在 RC 之前完成了此操作,但由于某种原因,文件被保存为“BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af”而不是文件名。下面的文件名变量也返回这个正文部分字符串而不是文件名。我似乎无法弄清楚我哪里出错了。感谢您的帮助。

客户端代码:

function upload() {
    $("#divResult").html("Uploading...");
    var formData = new FormData($('form')[0]); 
    $.ajax({
        url: 'api/files/uploadfile?folder=' + $('#ddlFolders').val(),
        type: 'POST',
        success: function (data) {
            $("#divResult").html(data);
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
}; 

Controller :

    public Task<HttpResponseMessage> UploadFile([FromUri]string folder)
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
        }

        // Save file
        MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/Files"));
        Task<IEnumerable<HttpContent>> task = Request.Content.ReadAsMultipartAsync(provider);

        return task.ContinueWith<HttpResponseMessage>(contents =>
        {
            string filename = provider.BodyPartFileNames.First().Value;
            return new HttpResponseMessage()
          {
              Content = new StringContent(string.Format("File saved in {0}.", folder))
          };

        }, TaskScheduler.FromCurrentSynchronizationContext());

文件看起来像:

enter image description here

最佳答案

这是我们做出的一项有意识的更改——采用 Content-Disposition header 字段中提供的文件名被认为存在安全风险,因此我们现在计算一个您所看到的文件名。

如果您想自己控制服务器本地文件名,那么您可以从 MultipartFormDataStreamProvider 派生并覆盖 GetLocalFileName 以提供您想要的任何名称。请注意,这样做可能出于安全考虑。

希望对您有所帮助,

亨里克

关于asp.net-mvc - ASP.NET Web API 文件保存为 "BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10970750/

相关文章:

asp.net-mvc - 如何防止 HttpUnauthorizedResult(401) 重定向到我的 Api 端点上的登录 Controller

c# - DevExpress MVC GridView

java - 使用 FileOutputStream 时的双文件名

php - 显示 PHP 为 HTTP 请求制作的确切 header ?

android - 网址打开连接

asp.net-mvc - 使用 IdentityServer 4 时如何在 Api 项目中添加附加声明

c# - 为什么 TempData 由 Session 支持

JavaScript:在文本区域中显示文件:

c++ - 使用 ReadFile WinAPI 读取 'Binary' 文件

html - 如何下载包含在线文件/文件夹列表中的所有文件和子目录的 HTTP 目录?