Activities of "kkmy"

public async Task< IRemoteStreamContent > ExportAsync(ExportDto input)
{
    var contents = new Dictionary<string, byte[]>();
    var discardedContents = new Dictionary<string, byte[]>();

    FillMuyCompressionItems(ref contents, ref discardedContents);
    FillMlCompressionItems(ref contents, ref discardedContents);
    FillAkbCompressionItems(ref contents, ref discardedContents);
    FillCkCompressionItems(ref contents, ref discardedContents);

    var zipFileName = "EXPORT.zip";

    var mainZipFileStream = new FileStream(Path.Join(Path.GetTempPath(), zipFileName), FileMode.Create, FileAccess.ReadWrite);

    using (var zipArchive = new ZipArchive(mainZipFileStream, ZipArchiveMode.Create, true))
    {
        for (var i = 0; i < contents.Count; i++)
        {
            var item = contents.ElementAt(i);
            
            using var originalFileStream = new MemoryStream(item.Value);

            var zipEntry = zipArchive.CreateEntry(item.Key, CompressionLevel.Fastest);

            await using var zipEntryStream = zipEntry.Open();

            await originalFileStream.CopyToAsync(zipEntryStream);
        }
    }

    mainZipFileStream.Seek(0, SeekOrigin.Begin);

    return new RemoteStreamContent(mainZipFileStream, zipFileName, FileTypes.Zip.ContentType);
}
public async Task< FileStreamResult > ExportAsync(ExportDto input)
{
    var contents = new Dictionary<string, byte[]>();
    var discardedContents = new Dictionary<string, byte[]>();

    FillMuyCompressionItems(ref contents, ref discardedContents);
    FillMlCompressionItems(ref contents, ref discardedContents);
    FillAkbCompressionItems(ref contents, ref discardedContents);
    FillCkCompressionItems(ref contents, ref discardedContents);

    var zipFileName = "EXPORT.zip";

    var mainZipFileStream = new FileStream(Path.Join(Path.GetTempPath(), zipFileName), FileMode.Create, FileAccess.ReadWrite);

    using (var zipArchive = new ZipArchive(mainZipFileStream, ZipArchiveMode.Create, true))
    {        
        for (var i = 0; i < contents.Count; i++)
        {
            var item = contents.ElementAt(i);
        
            var originalFileStream = new FileStream(Path.Join(Path.GetTempPath(), item.Key), FileMode.Create, FileAccess.ReadWrite);
            await originalFileStream.WriteAsync(item.Value);
            originalFileStream.Seek(0, SeekOrigin.Begin);
        
            var zipEntry = zipArchive.CreateEntry(item.Key, CompressionLevel.Fastest);

            await using(var zipEntryStream = zipEntry.Open())
            await using (originalFileStream)
            {
                await originalFileStream.CopyToAsync(zipEntryStream);
            }
        }
    }

    mainZipFileStream.Seek(0, SeekOrigin.Begin);

    return new FileStreamResult(mainZipFileStream, FileTypes.Zip.ContentType);
}

Is there an example for this? Because I have written it like the following:

public async Task< **FileStreamResult** > ExportAsync()
{
    ...
    
    return new FileStreamResult(zipFileStream, FileTypes.Zip.ContentType);
}

However, proxy generation is failed:

Hello,

I have a big zip file in the server (5GB). I am trying to send the file to the front end so that the user can download it.

return new RemoteStreamContent(zipFileStream, zipFileName, FileTypes.Zip.ContentType);

This approach works for moderate files, however gives an error for big files.

2025-05-22 12:07:54.247 +03:00 [ERR] Stream was too long.
System.IO.IOException: Stream was too long.
   at System.IO.MemoryStream.WriteAsync(ReadOnlyMemory`1 buffer, CancellationToken cancellationToken)
--- End of stack trace from previous location ---
   at System.IO.Stream.&lt;CopyToAsync&gt;g__Core|27_0(Stream source, Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
   at System.IO.Strategies.BufferedFileStreamStrategy.CopyToAsyncCore(Stream destination, Int32 bufferSize, CancellationToken cancellationToken)
   at Volo.Abp.AspNetCore.Mvc.ContentFormatters.RemoteStreamContentOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeNextResultFilterAsync&gt;g__Awaited|30_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeResultFilters&gt;g__Awaited|28_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeNextResourceFilter&gt;g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeFilterPipelineAsync&gt;g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeAsync&gt;g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.&lt;InvokeAsync&gt;g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.&lt;Invoke&gt;g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Volo.Abp.AspNetCore.Serilog.AbpSerilogMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at IPS.IPSHttpApiHostModule.&lt;&gt;c.&lt;&lt;OnApplicationInitialization&gt;b__12_0>d.MoveNext() in C:\eld-vm-01-b1\_work\27\s\src\IPS.HttpApi.Host\IPSHttpApiHostModule.cs:line 359
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Volo.Abp.AspNetCore.Security.Claims.AbpDynamicClaimsMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Volo.Abp.AspNetCore.Uow.AbpUnitOfWorkMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)
   at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.&lt;&gt;c__DisplayClass2_0.&lt;&lt;CreateMiddleware&gt;b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next)

What should be the approach for big files?

Thank you.

  • Exception message and full stack trace:
  • Steps to reproduce the issue:

Ok then thank you.

I'm not sure about angular. You can try to set IsVisibleToClients of IdentityProSettingNames.Session.PreventConcurrentLogin to fasle

Unfortunately, this does not work. Do you have any other suggestions or is it not provided in the framework?

Thanks for the reply. I have done what you have suggested and it works perfectly.

  1. Is it possible to hide this Sessions tab without overriding the Angular component? It would be the best if I can just override the GetList method and remove this tab.
  2. To be a reference for the people who are looking for a similar functionality, the part "IdentityProPreventConcurrentLoginBehaviour.Disabled.ToString()" does not disable the concurrent login, it disables the functionality to prevent concurrent login. You have to give either "LogoutFromAllDevices" or "LogoutFromSameTypeDevices" options to prevent. I just wanted to clarify as the term can be confusing.

Hello,

With the version 8.2.0, you have provided the feature of changing the behavior for the concurrent login ("Disabled", "Logout from same type devices" and "Logout from all devices"). However, this option can be changed by each tenant admin under the settings menu.

How can I set the behavior for all the tenants as superadmin (admin without a tenant) and make sure that tenant admins cannot change it in any case?

Thank you.

  • ABP Framework version: v8.2.0
  • UI Type: Angular
  • Database System: EF Core (PostgreSQL)

Any updates on this topic?

Showing 11 to 20 of 24 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on October 30, 2025, 06:33