0
我已經設置了一個MVC WebApi來將文件保存到Amazon S3。因此,當發佈文件時,我使用MultipartMemoryStreamProvider將文件保存爲字節數組而不保存到服務器,然後將其發送到S3。我用郵差插件Chrome瀏覽器調用我的端點和前端用戶界面使用angular.js將文件發佈到Web Api 2.0以保存在Amazon S3中
if (!Request.Content.IsMimeMultipartContent())
{
throw new NullReferenceException();
}
byte[] fileContent = new byte[0];
string path = string.Empty;
FileModel file = new FileModel();
MultipartMemoryStreamProvider provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider).ContinueWith(f =>
{
var content = provider.Contents.Single(c => c.Headers.ContentType != null);
fileContent = content.ReadAsByteArrayAsync().Result;
file.FileName = content.Headers.ContentDisposition.FileName.Trim(new Char[] { ' ', '"', '/','\\' });
file.FileType = content.Headers.ContentType.MediaType;
file.ProjectId = id;
});
if (file.FileName.ValidateString(Config.FileNameRegex) == false)
{
throw new ArgumentException("File name has unsupported characters.");
}
int fileId = this.fileService.CreateFile(file, fileContent);
除了所有的是偉大的工作,有時,沒有文件進來的請求。我得到一個錯誤:
var content = provider.Contents.Single(...
coz Contents.Count是0.我仍然不明白爲什麼。我有兩個視頻文件.mp4。首先.mp4正在工作,而第二個則沒有。他們是同一個視頻,我可以在我的個人電腦上播放他們,所以我知道他們是有效的並且工作。我不認爲API應該關心我發送給他的文件,或者它是有效的文件。有沒有人有一個想法。
編輯:問題不是我得到一個錯誤,問題是沒有文件來自POST。但只是有時候!!!!
通過你的代碼,並調用對象的屬性,那麼你將解決您的問題之前,檢查空。 – dansasu11
我不認爲你理解或我不確定你的意思。 「provider.Contents」是一個集合,其中包含已發佈的數據。而且我知道有一個文件張貼因爲我把它發送給我自己。但仍然取決於文件(而不是擴展名),有時收集有項目,有時它不。我從這裏得到了這個想法:https://cmatskas.com/upload-files-to-the-server-using-javascript-and-mvc-webapi/ – kms
問題不是我得到一個錯誤,問題是沒有文件來自POST。但只是有時候!!!! – kms