gpt4 book ai didi

asp.net-mvc - HttpRequestMessage 内容中的文件名

转载 作者:行者123 更新时间:2023-12-02 00:09:34 25 4
gpt4 key购买 nike

我实现了 POST Rest 服务来将文件上传到我的服务器。我现在遇到的问题是我想按类型限制上传的文件。举例来说,我只想允许上传 .pdf 文件。

我试图做的是

            Task<Stream> task = this.Request.Content.ReadAsStreamAsync();
task.Wait();
FileStream requestStream = (FileStream)task.Result;

但不幸的是,不可能将 Stream 转换为 FileStream 并通过 requestStream.Name 访问该类型。

有没有一种简单的方法(除了将流写入磁盘并检查类型之外)来获取文件类型?

最佳答案

如果您将文件上传到 Web API 并且想要访问文件数据 ( Content-Disposition ),则应将文件上传为 MIME 分段 ( multipart/form-data )。

Here我展示了一些关于如何从 HTML 表单、Javascript 和 .NET 上传的示例。

然后您可以执行类似的操作,此示例仅检查 pdf/doc 文件:

public async Task<HttpResponseMessage> Post()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable,
"This request is not properly formatted - not multipart."));
}

var provider = new RestrictiveMultipartMemoryStreamProvider();

//READ CONTENTS OF REQUEST TO MEMORY WITHOUT FLUSHING TO DISK
await Request.Content.ReadAsMultipartAsync(provider);

foreach (HttpContent ctnt in provider.Contents)
{
//now read individual part into STREAM
var stream = await ctnt.ReadAsStreamAsync();

if (stream.Length != 0)
{
using (var ms = new MemoryStream())
{
//do something with the file memorystream
}
}
}
return Request.CreateResponse(HttpStatusCode.OK);
}
}

public class RestrictiveMultipartMemoryStreamProvider : MultipartMemoryStreamProvider
{
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
var extensions = new[] {"pdf", "doc"};
var filename = headers.ContentDisposition.FileName.Replace("\"", string.Empty);

if (filename.IndexOf('.') < 0)
return Stream.Null;

var extension = filename.Split('.').Last();

return extensions.Any(i => i.Equals(extension, StringComparison.InvariantCultureIgnoreCase))
? base.GetStream(parent, headers)
: Stream.Null;

}
}

关于asp.net-mvc - HttpRequestMessage 内容中的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937926/

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