Ok, ja tenim les imatges sel·leccionades, posades en una estructura FormData i enviades al servidor. Ara doncs és el moment de guardar-les on toca i posar-les a la BBDD (només el path). Sempre he estat de la filosofia que qui millor guarda els fitxers són els sistemes de fitxers, les BBDD les deixo sempre per dades (cadenes de text, números etc... no fitxers). Així doncs la rutina següent fa:
- Gestió de la carpeta on es guarden els fitxers.
- Un bucle que per cada imatge...
- La guarda a disc
- Insereix les seves dades a la BBDD
private void GetFileAndSave()
{
try
{
Resp.ContentType = "plain/text";
string Arrel = Servr.MapPath("/");
string Any = DateTime.Now.Year.ToString();
string Mes = DateTime.Now.Month.ToString();
clsImatges Imatges = new clsImatges(ConnStr);
Dictionary<string, string> Params = new Dictionary<string, string>();
string Imatge;
string IdPost = Req["IdPost"];
string HDDPathImgs;
HDDPathImgs = Arrel + PathImgs + "/" + Any + "/" + Mes;
if (!Directory.Exists(HDDPathImgs))
{
Directory.CreateDirectory(HDDPathImgs);
}
foreach (string strFile in Req.Files)
{
HttpPostedFile postedFile = Req.Files[strFile];
Imatge = HDDPathImgs + "/" + postedFile.FileName;
if (!File.Exists(Imatge))
{
postedFile.SaveAs(Imatge);
Params.Add("Imatge", Imatge);
Params.Add("IdPost", IdPost);
Imatges.INS(Params);
Params.Clear();
}
}
Resp.Write("OK");
}
catch (Exception Err)
{
Resp.Write("ERROR: " + Err.Message);
}
}
Un cop guardades les imatges al servidor, el javascript pregunta quines imatges té associades el post per posar-les i que es puguin fer servir. Es fa servir una clase per després serialitzar en JSON. D'això s'encarrega la següent rutina:
public class clsImatgeJSON
{
public string IdImatge { get; set; }
public string PathImatge { get; set; }
}
private void LoadData()
{
Resp.ContentType = "application/json";
clsImatges Imatges = new clsImatges(ConnStr);
Dictionary<string, string> Params = new Dictionary<string, string>();
DataTable tblImatges;
string IdPost = Req["IdPost"];
List<clsImatgeJSON> ImatgesJSON = new List<clsImatgeJSON>();
clsImatgeJSON ImatgeJSON;
string Arrel = Servr.MapPath("/");
Params.Add("IdPost", IdPost);
tblImatges = Imatges.GET(Params);
foreach (DataRow DR in tblImatges.Rows)
{
ImatgeJSON = new clsImatgeJSON();
ImatgeJSON.IdImatge = DR["IdImatge"].ToString();
ImatgeJSON.PathImatge = DR["Imatge"].ToString().Replace(Arrel, "/");
ImatgesJSON.Add(ImatgeJSON);
}
Resp.Write(clsJSON.Serialize(ImatgesJSON));
}
Una altra funcionalitat que cobreix la part servidora és la eliminació de fitxers (peticions que també arriben via Ajax). S'ha d'eliminar de la BBDD i del sistema de fitxers.
private void Delete()
{
try
{
Resp.ContentType = "plain/text";
string IdImatge = Req["IdImatge"];
clsImatges Imatges = new clsImatges(ConnStr);
Dictionary<string, string> Params = new Dictionary<string, string>();
DataTable tblImatges;
Params.Add("IdImatge", IdImatge);
tblImatges = Imatges.GET(Params);
if (File.Exists(tblImatges.Rows[0]["Imatge"].ToString()))
{
File.Delete(tblImatges.Rows[0]["Imatge"].ToString());
Imatges.DEL(Params);
Resp.Write("OK");
}
else
{
Resp.Write("ERROR: Fitxer no trobat");
}
}
catch (Exception Err)
{
Resp.Write("ERROR: " + Err.Message);
}
}
L'acces a BBDD es fa mitjançant la capa d'acces a BBDD que faig servir habitualment, de la que ja parlaré en un altra post. |