文件上载控制会话从列表中删除文件后不删除

我为这个问题感到沮丧了几个星期,


如何为此多文件上传进行会话


  if (Session["FileUpload1"] == null && FileUploadQ2.HasFile)

        {

            Session["FileUpload1"] = FileUploadQ2;


            foreach (HttpPostedFile file in FileUploadQ2.PostedFiles)

            {

                listofuploadedfiles.Text += String.Format("<p><font color='black'>" + file.FileName + "</font><a class='close'><font color='red'>x</font><a>" + "</p>");


            }


        }


        else if (Session["FileUpload1"] != null && (!FileUploadQ2.HasFile))

        {

            FileUploadQ2 = (FileUpload)Session["FileUpload1"];


        }

        else if(FileUploadQ2.HasFile)

        {

            Session["FileUpload1"] = FileUploadQ2;

        }


PIPIONE
浏览 109回答 1
1回答

海绵宝宝撒

正如@VDWWD所指出的,不应将文件存储在 Session 对象中,而应将它们存储在磁盘上。您可以在下面找到该功能的快速实现。&nbsp; &nbsp; public interface IFileStorage&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Task UploadFile(string fileName, Stream fileContent);&nbsp; &nbsp; &nbsp; &nbsp; void TryRemoveFile(string fileName, out bool fileRemoved);&nbsp; &nbsp; &nbsp; &nbsp; void GetFile(string fileName);&nbsp; &nbsp; }&nbsp; &nbsp; public class FileSystemStorage : IFileStorage&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; private readonly PhysicalFileProvider _fileProvider;&nbsp; &nbsp; &nbsp; &nbsp; private readonly ILogger<FileSystemStorage>_logger;&nbsp; &nbsp; &nbsp; &nbsp; public FileSystemStorage(IFileProvider fileProvider, ILogger<FileSystemStorage> logger)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _fileProvider = (PhysicalFileProvider)fileProvider;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _logger = logger;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public void GetFile(string fileName)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new NotImplementedException();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public void TryRemoveFile(string fileName, out bool fileRemoved)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RemoveFile(fileName);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileRemoved = true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch(Exception ex)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _logger.LogError($"Couldnt remove file {fileName}: {ex.ToString()}" );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fileRemoved = false;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; public async Task UploadFile(string fileName, Stream fileContent)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var filePath = Path.Combine(_fileProvider.Root, fileName);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_fileProvider.GetFileInfo(filePath).Exists)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new ArgumentException("Given file already exists!");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _logger.LogInformation($"Saving file to: {filePath}..");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; using (Stream file = File.Create(filePath))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; await fileContent.CopyToAsync(file);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.Flush();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _logger.LogInformation($"File: {filePath} saved successfully.");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }在 Startup.cs 中,ConfigureServices 方法添加以下行以注入 FileSystemStorage:IFileProvider physicalProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "AppData"));services.AddSingleton<IFileProvider>(physicalProvider);services.AddTransient<IFileStorage, FileSystemStorage>();然后在控制器构造函数中获取文件系统存储实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript