PDA

Ver la Versión Completa : Ayuda a no subir imagen con mas de 500 K en un TcxDBImage


Javier13
16-08-2017, 19:38:31
Quiero hacer que si el usuario sube una imagen que pese más de 500 kilobytes no lo deje subirla alguien que me ayude
Estoy utilizando el componente TcxDBImage para subir las imagenes

Casimiro Notevi
16-08-2017, 19:40:57
¿Subirla a dónde y desde dónde?

Javier13
16-08-2017, 19:46:55
Subirla a la base de datos (SQL) ya puedo subir la imagen pero quiero que el usuario solamente pueda subir imagenes <=500 K
para que no ocupe tanta memoria la base de datos. en pocas palabras solo quiero que si la imagen pesa más de 500 K arroje un msj de que suba otra más chica

Casimiro Notevi
16-08-2017, 20:14:08
Pues miras antes lo que mide la imagen y haces lo que estimes oportuno.
Ejemplo: http://www.clubdelphi.com/foros/showthread.php?t=69336

Javier13
16-08-2017, 21:12:13
A un no eh podido resolverlo :/

movorack
16-08-2017, 21:34:14
Hola, ¿Y que no haz podido resolver?. ¿Calcular el tamaño para restringir?, ¿Guardarlo en la DB?.

Comparte algo de código para que sea mas fácil prestar una ayuda. aún no me llega el pedido.


https://images-na.ssl-images-amazon.com/images/I/41dEMLMLONL._AC_US218_.jpg (https://www.amazon.com/Amlong-CrystalClear-Crystal-Including-Wooden/dp/B004ZWMB38/ref=sr_1_2?ie=UTF8&qid=1502911998&sr=8-2&keywords=crystal+ball)

ecfisa
16-08-2017, 21:36:04
Hola.

¿ Y como selecciona el usuario la imágen que será guardada ?

Saludos :)

Javier13
16-08-2017, 21:38:55
Aquí solo estoy subiendo la imagen en el TcxDBImage

pdDoc.InitialDir := GetCurrentdir();
pdDoc.Execute;
try
edDocumento.Picture.LoadFromFile(pdDoc.FileName);
except
end;

Y quiero que antes de que la suba si pesa la imagen más de 500 k le harroje un mensaje para que escoja una que pese menos es todo.
(Calcular el tamaño para restringir movorack)

movorack
16-08-2017, 21:45:16
No olvides que para mostrar el código debes encerrarlo en las etiquetas DELPHI

Antes de hacer la carga, debes validar el tamaño del archivo (https://stackoverflow.com/questions/1642220/getting-size-of-a-file-in-delphi-2010-or-later) que están seleccionando en el cuadro de dialogo. Si no cumple con tus condiciones no lo dejas cargar.

Javier13
16-08-2017, 21:47:07
Como quedaría el código ya validando eso que comentas?

movorack
16-08-2017, 21:48:14
Revisa este link (https://stackoverflow.com/questions/1642220/getting-size-of-a-file-in-delphi-2010-or-later)

ecfisa
16-08-2017, 22:20:14
Aquí solo estoy subiendo la imagen en el TcxDBImage

pdDoc.InitialDir := GetCurrentdir();
pdDoc.Execute;
try
edDocumento.Picture.LoadFromFile(pdDoc.FileName);
except
end;

Y quiero que antes de que la suba si pesa la imagen más de 500 k le harroje un mensaje para que escoja una que pese menos es todo.
(Calcular el tamaño para restringir movorack)
Entonces, tomando en cuenta cualquiera de los enlaces que acertadamente te puso Casimiro, solo deberas averiguar el tamaño del archivo cuyo nombre se encuentra en: pdDoc.FileName

Saludos :)

Javier13
17-08-2017, 17:50:08
Estoy usando la funtion FileSize


function FileSize(const aFilename: String): Int64;
var
info: TWin32FileAttributeData;
begin
result := -1;

if NOT GetFileAttributesEx(PWideChar(aFileName), GetFileExInfoStandard, @info) then
EXIT;

result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
end;


Aquí subo el archivo y mando mandar la function

procedure TForm_Empleados.btnImportarClick(Sender: TObject);
var
Peso : Int64;
begin
inherited;
pdDoc.InitialDir := GetCurrentdir();
pdDoc.Execute;
try
edDocumento.Picture.LoadFromFile(pdDoc.FileName);
except
end;
Peso:=FileSize(pdDoc.FileName);
end;

pero me marca error incompatible types no se si me puedas ayudar a corregir el código

movorack
17-08-2017, 18:35:40
Javier13, en el editor del foro hay un botón con el ícono de Delphi. Ese te ayuda a mostrar el código de la forma correcta.

Acá te dejo un ejemplo. La validación la hago antes de cargar la imagen.


procedure TForm1.Button1Click(Sender: TObject);
function FileSize(const aFilename: String): Int64;
var
info: TWin32FileAttributeData;
begin
result := -1;

if not GetFileAttributesEx(PWideChar(aFileName), GetFileExInfoStandard, @info) then
Exit;

result := Int64(info.nFileSizeLow) or Int64(info.nFileSizeHigh shl 32);
end;
var
Dlg : TOpenDialog;
begin
Dlg := TOpenDialog.Create(Self);
try
Dlg.Title := 'Cargar imágen';
Dlg.Filter := 'Archivos BMP|*.bmp';
if Dlg.Execute then
begin
if FileSize(Dlg.FileName) > 524288 then
begin
MessageBox(0, 'El tamaño del archivo debe ser menor a 512 Kb',
PChar(Self.Caption), MB_ICONSTOP or MB_OK);
Exit;
end;

Image1.Picture.Bitmap.LoadFromFile(Dlg.FileName);
end;
finally
FreeAndNil(Dlg)
end;
end;


La prueba es en Delphi XE4

Javier13
17-08-2017, 19:10:36
Muchas gracias funciono a la perfección :D
Saludos.