Browse Source

Merge pull request #22574 from abpframework/auto-merge/rel-9-0/3615

Merge branch rel-9.1 with rel-9.0
pull/22575/head
maliming 10 months ago
committed by GitHub
parent
commit
0fb60cdecb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 20
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs
  2. 13
      framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs

20
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.ModelBinding;
@ -99,6 +100,7 @@ public class AbpRemoteStreamContentModelBinder<TRemoteStreamContent> : IModelBin
{
var form = await request.ReadFormAsync();
var useMemoryStream = form.Files.Count > 1;
foreach (var file in form.Files)
{
// If there is an <input type="file" ... /> in the form and is left blank.
@ -109,13 +111,27 @@ public class AbpRemoteStreamContentModelBinder<TRemoteStreamContent> : IModelBin
if (file.Name.Equals(modelName, StringComparison.OrdinalIgnoreCase))
{
postedFiles.Add(new RemoteStreamContent(file.OpenReadStream(), file.FileName, file.ContentType, file.Length).As<TRemoteStreamContent>());
if (useMemoryStream)
{
var memoryStream = new MemoryStream();
await file.OpenReadStream().CopyToAsync(memoryStream);
memoryStream.Position = 0;
postedFiles.Add(new RemoteStreamContent(memoryStream, file.FileName, file.ContentType, file.Length, disposeStream: false).As<TRemoteStreamContent>());
bindingContext.HttpContext.Response.OnCompleted(async () =>
{
await memoryStream.DisposeAsync();
});
}
else
{
postedFiles.Add(new RemoteStreamContent(file.OpenReadStream(), file.FileName, file.ContentType, file.Length, disposeStream: false).As<TRemoteStreamContent>());
}
}
}
}
else if (bindingContext.IsTopLevelObject)
{
postedFiles.Add(new RemoteStreamContent(request.Body, null, request.ContentType, request.ContentLength).As<TRemoteStreamContent>());
postedFiles.Add(new RemoteStreamContent(request.Body, null, request.ContentType, request.ContentLength, disposeStream: false).As<TRemoteStreamContent>());
}
}

13
framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs

@ -17,7 +17,6 @@ public class RemoteStreamContent : IRemoteStreamContent
public RemoteStreamContent(Stream stream, string? fileName = null, string? contentType = null, long? readOnlyLength = null, bool disposeStream = true)
{
_stream = stream;
FileName = fileName;
if (contentType != null)
{
@ -34,10 +33,16 @@ public class RemoteStreamContent : IRemoteStreamContent
public virtual void Dispose()
{
if (!_disposed && _disposeStream)
if (_disposed)
{
_disposed = true;
_stream?.Dispose();
return;
}
if (_disposeStream)
{
_stream.Dispose();
}
_disposed = true;
}
}

Loading…
Cancel
Save