У меня есть объект массовой загрузки, который используется для массовой загрузки примерно 25-40 файлов изображений за раз. Каждое изображение размером около 100-150 КБ.
Во время загрузки я создал для каждого цикла, который берет имя файла изображения (без расширения файла), чтобы записать его в столбец с именем «sku». Кроме того, для каждого загружаемого файла дата записывается в столбец с именем DateUpdated, а также некоторые данные пути к изображению.
Вот мой код c #:
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 получил сегодняшнюю дату.
- Если записи не существует, вставьте запись как обычно.
Что нужно учитывать:
Если запись существует, мы позволим загрузить фактическое изображение. Он просто перезапишет существующее изображение, чтобы новая версия отображалась в Интернете.
Мы используем SQL Server 2000 в размещенной среде (DiscountAsp).
Я программирую на C #.
Процесс загрузки будет использоваться примерно 2 менеджерами несколько раз в месяц (каждый), что для меня не является преимуществом.
Хотя я младший. Разработчик, я предполагаю, что хранимая процедура будет способом пойти. Просто кажется более эффективным - сделать эту проверку записи отдельно для каждого цикла ... но не уверен. Мне нужна дополнительная помощь в написании sproc, так как у меня не слишком много опыта с ними.
Спасибо всем ...