gpt4 book ai didi

asp.net-web-api2 - 为什么ContentDisposition的FileName添加额外的斜杠和引号+引发异常?

转载 作者:行者123 更新时间:2023-12-04 19:30:59 24 4
gpt4 key购买 nike

enter image description here

我正在尝试使用 ASP.NET WebApi2 上传文件。我正在尝试两个选项:第一个是将文件保存在内存中。为此,我使用了一段代码,它是 HttpContent 类的扩展:

public static async Task<HttpPostedData> ParseMultipartAsync(this HttpContent postedContent)
{
var provider = await postedContent.ReadAsMultipartAsync();

var files = new Dictionary<string, HttpPostedFile>(StringComparer.InvariantCultureIgnoreCase);
var fields = new Dictionary<string, HttpPostedField>(StringComparer.InvariantCultureIgnoreCase);

string[] toegestaneExtensies = { ".jpg", ".jpeg", ".gif", ".png", ".pdf", ".txt", ".xlsx" };

foreach (var content in provider.Contents)
{
var fieldName = content.Headers.ContentDisposition.Name.Trim('"');

if (!string.IsNullOrEmpty(content.Headers.ContentDisposition.FileName))
{
bool geuploadBestandHeeftToegestaneExtensie = (toegestaneExtensies.Contains(Path.GetExtension(content.Headers.ContentDisposition.FileName)));

if ((content.Headers.ContentLength > 0) && geuploadBestandHeeftToegestaneExtensie)
{
var file = await content.ReadAsByteArrayAsync();
var fileName = content.Headers.ContentDisposition.FileName.Trim('"');
files.Add(fieldName, new HttpPostedFile(fieldName, fileName, file));
}
}
else
{
if (fieldName != "submit")
{
var data = await content.ReadAsStringAsync();
fields.Add(fieldName, new HttpPostedField(fieldName, data));
}
}
}

return new HttpPostedData(fields, files);
}
}

但这会引发异常,因为 FileName 的格式不正确。我可以看到图片中的文件名是“正常的”,但是查看 ContentDisposition,文件名突然变成了“\”banana.jpg\””。为什么是这样?

我要做的第二件事是保存到磁盘。这似乎有效,我可以将文件写入磁盘,但收到以下错误消息:

“将 MIME 多部分正文部分写入输出流时出错”-“拒绝访问”。

它只是以下代码:
public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
{
public CustomMultipartFormDataStreamProvider(string path) : base(path)
{
}

public override string GetLocalFileName(HttpContentHeaders headers)
{
return headers.ContentDisposition.FileName.Replace("\"", string.Empty);
}
}

var streamProvider = new MultipartFormDataStreamProvider("d:/");
var t = await Request.Content.ReadAsMultipartAsync(streamProvider);

但是没有访问被拒绝,文件被写入,以前不存在,文件有一个正常的文件名。会发生什么?

最佳答案

错误在这里:
https://github.com/aspnet/HttpAbstractions/issues/446

解决方法是:var fileName = file.Headers.ContentDisposition.FileName.TrimStart('\"').TrimEnd('\"');
悲伤但真实

关于asp.net-web-api2 - 为什么ContentDisposition的FileName添加额外的斜杠和引号+引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com