以中等信任的方式在ASP.NET中存储临时用户文件

Sla*_*avo 5 asp.net file-io medium-trust

我有一个场景,我的ASP.NET Web应用程序的用户提交由文本信息和图像组成的推荐.提交过程包括以下步骤:

  • 首先,用户输入内容并选择图像的路径
  • 当他点击预览时,再次显示信息以便他可以确认
  • 确认后,信息将保留在数据库中

这个问题是我不希望在用户实际确认之前将上传的图像存储在数据库中.相反,我将它们存储为临时文件,并在最终确认后将它们放入DB中.

由于我还希望我的应用程序以中等信任的方式运行,因此我只对应用程序目录具有写权限,而且不在外面.我甚至想将ASPNET/NETWORK SERVICE用户的写权限限制在〜/ App_Data文件夹中.我的方案的问题是,一旦在此文件夹中创建了临时文件,应用程序池就会被回收,我不希望每个提示都提交.

您如何建议我保留这些临时文件?如果我更新文件,则不会重新启动池 - 仅在创建或重命名时.但我不认为我可以将整个图像存储在一个文件中供所有用户使用.你怎么看?

更新:我应该注意到我正在使用第三方控件进行上传.它允许我在上传后以编程方式访问文件内容的二进制流,但是在第二次回发后我不能保留它(第一步和回发实际上进行上传).

Seb*_*son 5

我推荐IsolatedStorage.这是一种虚拟文件夹.

以下是CodeProject上的示例的摘录:

IsolatedStorageFileStream stream = 
  new IsolatedStorageFileStream(ISOLATED_FILE_NAME, 
  FileMode.Create, isoStore);

StreamWriter writer = new StreamWriter( stream );
writer.WriteLine( "This is my first line in the isolated storage file." );
writer.WriteLine( "This is second line." );
writer.Close();
Run Code Online (Sandbox Code Playgroud)

更新:要清理文件,只需执行以下操作:

string fileName = "isolatestorage.txt";

IsolatedStorageFile storage = IsolatedStorageFile.GetStore(
    IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

string[] files = storage.GetFileNames(fileName);
foreach(string file in files) {
    if(file == fileName) {
        storage.DeleteFile(file);
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)