[英]API decode a Base64 encoded file received via ReadAsMultipartAsync
我有一個API,接收一個150K編碼(base64)視頻文件,我使用以下代碼保存在硬盤上:
var provider = new Base64MultipartFileStreamProvider("C:\\sample.avi");
await Request.Content.ReadAsMultipartAsync(streamProvider);
我的目標是在將其保存到磁盤之前解碼它,因此我使用個性化提供程序Base64MultipartFileStreamProvider:MultipartFileStreamProvider並覆蓋GetStream方法,如下所示:
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
Collection<MultipartFileData> _fileData = new Collection<MultipartFileData>();
MultipartFileData fileData = new MultipartFileData(headers, fullPath);
_fileData.Add(fileData);
var stream = File.Create(fullPath, 0x1000, FileOptions.Asynchronous);
return new CryptoStream(stream, new FromBase64Transform(),
CryptoStreamMode.Write);
}
這將接收的文件保存為C:\\ sample.avi,但文件仍保留base64編碼。
題:
在將文件保存到硬盤驅動器之前解碼文件的正確方法是什么?
您需要編寫自己的StreamProvider,最簡單的方法是從文件流提供程序開始。
這只是一個草圖,由您決定是否有效
當你獲得文件流時,在將其寫入文件之前用一個cryptostream包裝它:
這是一個粗略的草圖,使用下面的提供程序而不是示例中的提供程序:
public class Base64MultiPartFileStreamProvider : MultipartFormDataStreamProvider
{
public Base64MultiPartFileStreamProvider(string path) : base(path)
{
}
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
var stream = base.GetStream(parent, headers);
ContentDispositionHeaderValue contentDisposition = headers.ContentDisposition;
if (contentDisposition != null)
{
if (!string.IsNullOrEmpty(contentDisposition.FileName))
{
stream = new CryptoStream(stream, new FromBase64Transform(), CryptoStreamMode.Write);
}
}
return stream;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.