【问题标题】:Most efficient way for uploading images (two approaches)最有效的图片上传方式(两种方式)
【发布时间】:2025-12-11 14:30:02
【问题描述】:

方法 1

这种方法是常见的。如果您要插入一些包含文本的数据 和图片,您可以在点击保存按钮(保存文本)之前上传图片。

方法 2

我创建了一个HttpPostedFile 类型的数组:

static int i;
static HttpPostedFile[] fp;

在 .aspx 中:

<ASP:FILEUPLOAD id="btnBrowse" runat="server" />
<br />
<ASP:BUTTON id="btnUpload" runat="server" onclick="addfile_Click"/>
<br />
<ASP:BUTTON id="btnSave" runat="server" onclick="save_Click" />

btnUpload 会将下一张图片添加到数组中:

protected void addfile_Click(object sender, EventArgs e)
{
    if (btnBrowse.HasFile)
    {
        fp[i] = btnBrowse.PostedFile;
        i++;
    }
}

btnSave 会在数组中插入图片:

protected void Save_Click(object sender, EventArgs e)
{
    for (int j = 0; j <= i; j++)
    {
        string filename = Path.GetFileName(fp[j].FileName);

        var image = SD.Image.FromStream(fp[j].InputStream);

        image.Save(Server.MapPath("~/images/Profiles_Images/") + filename);
    }
}

它工作正常。我有两个问题:

  1. 第二种方法比第一种更有效吗?
  2. 如果是这样,如何在不使用静态的情况下保存数组中的文件(不保存没有静态的值)?因为如您所知,静态并不高效。

【问题讨论】:

  • @HTB:我相信您关于静态效率不高的一般性陈述是不明智的;没有任何迹象表明,制作静态的东西会比非静态的东西效率低。这完全取决于任何资源会发生多少争用。
  • 我读过很多文章暗示使用静态是程序员之间的常见错误!
  • @HTB:不是。 它的使用方式是一个错误。仅仅成为static 本身并没有坏处。
  • 好的,请纠正我。它会使页面超载。它会在页面生命周期后处理吗?
  • @HTB:同样是关于如何使用静态;我质疑你所说的 all 静态使用是错误的。这是一个错误的说法。

标签: c# asp.net sql-server image performance


【解决方案1】:

无论哪种方式都可以,第二个选项可能更有效,因为它一次上传所有文件,而不是发布一个文件然后再发布另一个文件。服务器将花费相同的时间,但从用户体验来看,这将是乏味的。

但是,为了获得真正良好的用户体验以及一次上传多个文件的能力,请使用 uploadify:http://www.uploadify.com/

【讨论】:

  • 选择第二个的原因有两个。 1)我必须一一上传才能让用户写评论。 2)直到用户点击保存按钮,图像才会被保存(这将保存其他输入和图像一起创建一个完整的记录)
【解决方案2】:

目前还不清楚什么对您来说“高效”。您是否担心对用户方便(可用性?),或者对于服务器(性能?)或正确性(这似乎是您在“静态效率不高”中使用它的方式)最快/最优化。 ..

如果您想支持多个用户,则使用静态将不起作用。静态在服务器端应用程序中是非常合理的,并且几乎不能安全地存储用户数据以供服务器代码使用。

如果您想逐个存储文件,请考虑使用 SQL 会话状态或其他一些持久存储,因为在请求之间保存在内存中的文件可能会因进程重启而丢失。

【讨论】:

  • 是的。它适用于多个用户。我还能用什么来代替静态?
  • 正如我所说 - 考虑会话状态(如果您关心进程重新启动,请考虑 SQL 版本)。一次上传多个文件也没有什么特别的错误,只要您在发布前提供合适的用户界面来输入所有必要的数据。