У меня есть объект массовой загрузки, который используется для массовой загрузки примерно 25-40 файлов изображений за раз. Каждое изображение имеет размер около 100-150 кб.
Во время загрузки я создал цикл for each, который берет имя файла изображения (минус расширение файла), чтобы записать его в столбец с именем «sku». Кроме того, для каждого загружаемого файла дата записывается в столбец с именем DateUpdated, а также некоторые данные пути к изображению.
Вот мой код С#:
protected void graphicMultiFileButton_Click(object sender, EventArgs e)
{
//graphicMultiFile is the ID of the bulk uploading object ( provided by Dean Brettle: http://www.brettle.com/neatupload )
if (graphicMultiFile.Files.Length > 0)
{
foreach (UploadedFile file in graphicMultiFile.Files)
{
//strip ".jpg" from file name (will be assigned as SKU)
string sku = file.FileName.Substring(0, file.FileName.Length - 4);
//assign the directory where the images will be stored on the server
string directoryPath = Server.MapPath("~/images/graphicsLib/" + file.FileName);
//ensure that if image existes on server that it will get overwritten next time it's uploaded:
file.MoveTo(directoryPath, MoveToOptions.Overwrite);
//current sql that inserts a record to the db
SqlCommand comm;
SqlConnection conn;
string connectionString = ConfigurationManager.ConnectionStrings["DataConnect"].ConnectionString;
conn = new SqlConnection(connectionString);
comm = new SqlCommand("INSERT INTO GraphicsLibrary (sku, imagePath, DateUpdated) VALUES (@sku, @imagePath, @DateUpdated)", conn);
comm.Parameters.Add("@sku", System.Data.SqlDbType.VarChar, 50);
comm.Parameters["@sku"].Value = sku;
comm.Parameters.Add("@imagePath", System.Data.SqlDbType.VarChar, 300);
comm.Parameters["@imagePath"].Value = "images/graphicsLib/" + file.FileName;
comm.Parameters.Add("@DateUpdated", System.Data.SqlDbType.DateTime);
comm.Parameters["@DateUpdated"].Value = DateTime.Now;
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}
}
После загрузки изображений менеджеры вернутся и повторно загрузят изображения, которые были загружены ранее.
Это связано с тем, что эти изображения продуктов постоянно пересматриваются и улучшаются.
Для каждого нового/улучшенного изображения имя файла и расширение останутся прежними, поэтому при первой загрузке изображения 321-54321.jpg на сервер новая/улучшенная версия этого изображения по-прежнему будет иметь имя файла изображения 321-54321.jpg.
Я не могу точно сказать, останутся ли размеры файлов в диапазоне 100-150 КБ. Я предполагаю, что размер файла изображения со временем будет расти.
Когда изображения будут загружены (снова), в базе данных, конечно же, будет существующая запись для этого изображения. Как лучше всего:
- Проверить базу данных на наличие существующей записи (хранимая процедура или SqlDataReader или создать DataSet...?)
- Затем, если запись существует, просто ОБНОВИТЕ эту запись, чтобы столбец DateUpdated получил сегодняшнюю дату.
- Если записи не существует, выполните INSERT записи как обычно.
Что следует учитывать:
Если запись существует, мы позволим загрузить фактическое изображение. Он просто перезапишет существующее изображение, чтобы новая версия отображалась в Интернете.
Мы используем SQL Server 2000 в размещенной среде (DiscountAsp).
Я программирую на С#.
Процесс загрузки будет использоваться примерно двумя менеджерами несколько раз в месяц (каждый), что для меня не является частым использованием.
Хотя я младший. разработчик, я предполагаю, что хранимая процедура будет подходящим вариантом. Просто кажется более эффективным - сделать эту проверку записи вне цикла for each... но не уверен. Мне понадобится дополнительная помощь в написании sproc, так как у меня не так много опыта с ними.
Спасибо всем...