Самый эффективный способ загрузки изображений (два подхода) - PullRequest
0 голосов
/ 06 мая 2011

Подход 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. Если это так, как сохранить файлы в массиве без использования статического (не сохраняя значения без статического)? Потому что статика не эффективна, как вы знаете.

Ответы [ 2 ]

0 голосов
/ 06 мая 2011

Неясно, какой «эффективный» мужчина для вас. Вы беспокоитесь о том, чтобы быть удобным для пользователя (удобство использования?) Или что является самым быстрым / наиболее оптимальным для сервера (производительность?), Или правильностью (что, по-видимому, является способом, которым вы использовали его в «статика не эффективна»). ..

Использование статического не будет работать, если вы хотите поддерживать несколько пользователей. Статичность разумна в серверных приложениях и почти никогда не безопасна для хранения пользовательских данных для серверного кода.

Если вы хотите хранить файлы один за другим, рассмотрите возможность использования состояния сеанса SQL или другого постоянного хранилища, поскольку файлы, сохраненные в памяти между запросами, могут быть потеряны из-за перезапуска процесса.

0 голосов
/ 06 мая 2011

В любом случае все в порядке, второй вариант, вероятно, немного более эффективен, поскольку он загружает их все за один раз, а не публикует файл, а затем публикует другой. Это займет столько же времени для сервера, но из опыта пользователя это будет утомительно.

Однако, для действительно приятного пользовательского опыта, а также возможности загружать несколько файлов одновременно, используйте uploadify: http://www.uploadify.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...