我需要使用流(Azure Blob 存储)上传文件,但无法找到如何从对象本身获取流。请参阅下面的代码。
我是 WebAPI 的新手,并且使用过一些示例。我正在获取文件和文件数据,但对于我的上传方法来说,它的类型不正确。因此,我需要将其获取或转换为普通的 Stream,目前看来有点困难:)
我知道我需要使用ReadAsStreamAsync().Result
以某种方式,但它在 foreach 循环中崩溃,因为我得到了两个provider.Contents(第一个似乎是正确的,第二个则不然)。
[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> Upload()
{
if (!Request.Content.IsMimeMultipartContent())
{
this.Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
}
var provider = GetMultipartProvider();
var result = await Request.Content.ReadAsMultipartAsync(provider);
// On upload, files are given a generic name like "BodyPart_26d6abe1-3ae1-416a-9429-b35f15e6e5d5"
// so this is how you can get the original file name
var originalFileName = GetDeserializedFileName(result.FileData.First());
// uploadedFileInfo object will give you some additional stuff like file length,
// creation time, directory name, a few filesystem methods etc..
var uploadedFileInfo = new FileInfo(result.FileData.First().LocalFileName);
// Remove this line as well as GetFormData method if you're not
// sending any form data with your upload request
var fileUploadObj = GetFormData<UploadDataModel>(result);
Stream filestream = null;
using (Stream stream = new MemoryStream())
{
foreach (HttpContent content in provider.Contents)
{
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, content.ReadAsStreamAsync().Result);
stream.Position = 0;
filestream = stream;
}
}
var storage = new StorageServices();
storage.UploadBlob(filestream, originalFileName);**strong text**
private MultipartFormDataStreamProvider GetMultipartProvider()
{
var uploadFolder = "~/App_Data/Tmp/FileUploads"; // you could put this to web.config
var root = HttpContext.Current.Server.MapPath(uploadFolder);
Directory.CreateDirectory(root);
return new MultipartFormDataStreamProvider(root);
}
这与我几个月前遇到的困境相同(在MultipartStreamProvider
接管并自动神奇地将流保存到文件中)。建议是继承该类并重写方法......但这对我来说不起作用。 :((我想要这两个功能MultipartFileStreamProvider
and MultipartFormDataStreamProvider
卷入一个 MultipartStreamProvider,没有自动保存部分)。
这可能会有所帮助;这是一位 Web API 开发人员编写的一篇文章 https://stackoverflow.com/a/17073113/501556, and this https://stackoverflow.com/a/15843410/501556来自同一开发商。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)