Azureファイルストレージにファイルを格納するカスタムMultipartStreamProviderをLiftの一部として作成します。&従来のアプリケーションのシフト作業。クライアントはフロントエンドでAngularJSを、バックエンドでWebAPIを使用しています。 MultipartStreamProviderを使用しようとしているとき、GetStreamを実装して、書き込むためのストリームを返す必要があります。私はそれに書き込まれるストリーム/ファイルのサイズを求めるcloudFile.OpenWriteを使用しています。ただし、GetStreamでは、ContentDisposition.Sizeは空です。 AngularJSに各ファイルまたはバックエンドのコンテンツサイズを送信させる方法がありますか?ファイルストリームのサイズをどこか別の場所から調べることはできますか?どんな助けでも大歓迎です。ありがとう!アズールへMultipartStreamProviderでファイルサイズを取得する方法ContentDispositionから見つからない場合のGetStream
MultipartStreamProvider
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers)
{
// For form data, Content-Disposition header is a requirement
ContentDispositionHeaderValue contentDisposition = headers.ContentDisposition;
Console.WriteLine(files.Count);
if (contentDisposition != null)
{
// create default filename if its missing
contentDisposition.FileName = (String.IsNullOrEmpty(contentDisposition.FileName) ? $"{Guid.NewGuid()}.data" : contentDisposition.FileName);
// We won't post process files as form data
_isFormData.Add(false);
CloudMultipartFileData fileData = new CloudMultipartFileData(headers, _fileRepository.BaseUrl, contentDisposition.FileName);// your - aws - filelocation - url - maybe);
_fileData.Add(fileData);
var azureStream = _fileRepository.GetWriteStream(contentDisposition.Size, _relativeDirectory, fileData.FileName);
return azureStream;
// We will post process this as form data
_isFormData.Add(true);
}
throw new InvalidOperationException("Did not find required 'Content-Disposition' header field in MIME multipart body part..");
}
実際の呼び出し
public override Stream GetWriteStream(long? fileSize, string relativeDirectory, string filename)
{
var combinedRelativeDirectory = GetCloudDirectory(relativeDirectory);
CloudFile cloudFile = combinedRelativeDirectory.GetFileReference(filename);
return cloudFile.OpenWrite(fileSize, null, null);
}
AngularJSはアップロードコード
/********************************** Add/Upload Photos **************************************/
$scope.$watch('files', function (files) {
$scope.formUpload = false;
console.log(files);
if (files != null) {
for (var i = 0; i < files.length; i++) {
$scope.errorMsg = null;
(function (file) {
upload(file);
})(files[i]);
}
}
});
function upload(file) {
file.upload = Upload.upload({
url: window.location.origin + "/api/mydocs/uploadfile?storeFolder=" + $scope.attachmentFolder + "&storeId=" + $scope.storeId + "&userId=" + $scope.currentUser.UserId,
method: 'POST',
headers: {},
fields: {},
file: file
});