Ter*_*ård 5 c# multipartform-data filestream azure asp.net-web-api2
我需要使用Stream(Azure Blobstorage)上传文件,而无法找到如何从对象本身获取流.见下面的代码.
我是WebAPI的新手,并使用了一些示例.我正在获取文件和filedata,但我的方法上传它并不正确.因此,我需要将其转换或转换为普通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);
}
Run Code Online (Sandbox Code Playgroud)
这与我几个月前遇到的困境相同(在接管之前捕获上传流MultipartStreamProvider并自动神奇地将流保存到文件中)。建议是继承该类并重写方法......但这对我来说不起作用。MultipartFileStreamProvider:((我想要将和的功能MultipartFormDataStreamProvider合并到一个 MultipartStreamProvider 中,而不需要自动保存部分)。
这可能会有所帮助;这是由一位 Web API 开发人员编写的,并且来自同一开发人员。
| 归档时间: |
|
| 查看次数: |
17226 次 |
| 最近记录: |