Avatar billede mema Nybegynder
27. juli 2006 - 14:32 Der er 11 kommentarer og
1 løsning

Min uploadsmetode skulle kun uploade gif eller jpg filer

Hej,
Jeg har en skema, hvor man kan indtaste navn og 3 felter for uploading af billeder (uploading skal IKKE være obligatorisk). Billederne skulle være under 500 KB og være kun i "gif" eller "jpg" format.
Min metode begrænser billedstørrelser på 500 KB, men jeg kan ikke finde ud af at tilføje en kode, som bevirker, at ved uploading af et andet format end ovennævnte kommer der en fejlmeddelelse og data ikke sendes til Access databasen. Så bliver meget taknemlig hvis jeg få hjælp.

Min aspx fil:
---
<%@ Page language="c#" Codebehind="Skema.aspx.cs" AutoEventWireup="false" Inherits="EIS.Skema" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>MultipleUpload</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="Style.css" type="text/css" rel="stylesheet">
</HEAD>
<body bgColor="#6a828b">
<FORM id="Form1" method="post" encType="multipart/form-data" runat="server">
<P align="center">
<TABLE id="Table2" bgcolor="#eeffff" borderColor="#000000" cellSpacing="0" cellPadding="1" width="720" border="1">
<TR>
<TD>
<TABLE id="Table1" cellSpacing="0" cellPadding="3" width="718" border="0" align="center" bgColor="#eeffff">
<TR>
<TD width="18"></TD>
<TD width="200">Navn:</TD>
<TD width="450"><asp:textbox id="fNavn" runat="server" Width="200px" MaxLength="100" BackColor="#E0E0E0" tabIndex="1"></asp:textbox>
<asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ErrorMessage="* Du skal angive navn"
ControlToValidate="fNavn"></asp:RequiredFieldValidator></TD>
<TD width="50"></TD>
</TR>
<TR>
<TD width="18" height="50">
</TD>
<TD width="700" colSpan="3" height="50">
Du kan uploade op til 3 billeder. Billederne skal være under 500 KB. og i "Gif" eller "Jpg" format.</TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="200">Billede&nbsp;1:</TD>
<TD width="450"><INPUT id="File1" type="file" name="File1" runat="server" size="39"></TD>
<TD width="50"></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="200">Billede&nbsp;2:</TD>
<TD width="450"><INPUT id="File2" type="file" name="File2" runat="server" size="39"></TD>
<TD width="50"></TD>
</TR>
<TR>
<TD width="18"></TD>
<TD width="200">Billede&nbsp;3:</TD>
<TD width="450"><INPUT id="File3" type="file" name="File2" runat="server" size="39"></TD>
<TD width="50"></TD>
</TR>
<TD width="18"></TD>
<TD width="200"></TD>
<TD width="450"><INPUT id="Submit1" style="WIDTH: 96px; HEIGHT: 20px" type="submit" value="Send" name="Submit1" runat="server" onServerClick="UploadMultipleFiles_Clicked" tabIndex="13"></TD>
<TD width="50"></TD>                            </TR>
<TR>
<TD width="18"></TD>
<TD width="200" colSpan="3">
<P>
<asp:Label id="lblStor" runat="server" ForeColor="Red" Width="650px"></asp:Label>
<ASP:LABEL id="ResultMsg" runat="server" Width="650px" Visible="False" ForeColor="Green"></ASP:LABEL><BR>
</P>
</TD>
</TR>
<TR>
<TD width="18" height="30"></TD>
<TD width="200" colSpan="3" height="30"></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</P>
</FORM>
</body>
</HTML>
--------------------------

Min aspx.cs fil:
---
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using System.IO;
using System.IO.IsolatedStorage;

namespace EIS
{
/// Summary description for Indberetningsskema.
public class Skema : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox fNavn;
protected System.Web.UI.HtmlControls.HtmlInputFile File1;
protected System.Web.UI.HtmlControls.HtmlInputFile File2;
protected System.Web.UI.HtmlControls.HtmlInputFile File3;
protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;
protected System.Web.UI.WebControls.Label lblStor;
protected System.Web.UI.WebControls.Label ResultMsg;
protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
   
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
Response.CacheControl = "no-cache";
}
protected void UploadMultipleFiles_Clicked(object Sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
string strResultMessage = "";
string strFileName = "";
string strFolderName = "" + MapPath("MultipleUpload/");
HttpPostedFile objFile;
int i;
string strFile1 = File1.PostedFile.FileName;
string strFile2 = File2.PostedFile.FileName;
string strFile3 = File3.PostedFile.FileName;
string fileType1 = File1.PostedFile.ContentType;
string fileType2 = File2.PostedFile.ContentType;
string fileType3 = File3.PostedFile.ContentType;
int fileSize1 = File1.PostedFile.ContentLength;
int fileSize2 = File2.PostedFile.ContentLength;
int fileSize3 = File3.PostedFile.ContentLength;   

//hvis filen er mindre end 500 KB
if ((fileSize1 > 500*1024) || (fileSize2 > 500*1024) || (fileSize3 > 500*1024))
{
lblStor.Text = "Du prøver at uploade et billede, der er større end 500 KB!";
}           
else
{
try
{
for (i = 0; i <= Request.Files.Count - 1; i++)
{
objFile = Request.Files[i];
if (objFile.FileName != "")
{                       
strFileName = objFile.FileName;
strFileName = DateTime.Now.ToString("yyyy.MM.dd-HHmmss")+"-" + Path.GetFileName(strFileName);
                                ViewState["filnavn1"] = DateTime.Now.ToString("yyyy.MM.dd-HHmmss")+"-" + Path.GetFileName(strFile1);
                                ViewState["filnavn2"] = DateTime.Now.ToString("yyyy.MM.dd-HHmmss")+"-" + Path.GetFileName(strFile2);
                                ViewState["filnavn3"] = DateTime.Now.ToString("yyyy.MM.dd-HHmmss")+"-" + Path.GetFileName(strFile3);
                                objFile.SaveAs(strFolderName + strFileName);
}
}
}
                   
catch (Exception errorVariable)
{
strResultMessage = "<font color=red>" + errorVariable.ToString() + "</font>";
}
finally
{
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("fpdb/EIS.mdb");
OleDbConnection myConnection = new OleDbConnection(connStr);
string strSQL = "INSERT INTO eis(Navn, File1, File2, File3) Values (@fNavn, @File1, @File2, @File3)";
OleDbCommand cmdInsert = new OleDbCommand( strSQL, myConnection );    cmdInsert.Parameters.Add( "@Navn", fNavn.Text );
if (strFile1 != "")
{
cmdInsert.Parameters.Add( "@File1", ("EIS/MultipleUpload/" + ViewState["filnavn1"]) );
}
else
{
cmdInsert.Parameters.Add( "@File1", "");
}
if (strFile2 != "")
{
cmdInsert.Parameters.Add( "@File2", ("EIS/MultipleUpload/" + ViewState["filnavn2"]) );
}
else
{
cmdInsert.Parameters.Add( "@File2", "");
}
if (strFile3 != "")
{
cmdInsert.Parameters.Add( "@File3", ("EIS/MultipleUpload/" + ViewState["filnavn3"]) );
}
else
{
cmdInsert.Parameters.Add( "@File3", "");
}
   
//følgende linier fanger den nye ID og viser den efter at man har trykket på Submit-knappen
OleDbCommand GetLastID = new OleDbCommand("SELECT @@IDENTITY", myConnection);
myConnection.Open();
cmdInsert.ExecuteNonQuery();
double LastID = Math.Round(double.Parse(GetLastID.ExecuteScalar().ToString()),0);
string navn = fNavn.Text;
string fil1 = Path.GetFileName(strFile1);
string fil2 = Path.GetFileName(strFile2);
string fil3 = Path.GetFileName(strFile3);
//følgende 2 linier sætter Session-Cookie (det ligger kun i browserens memory)
//og når browseren lukkes forsvinder den. Den indsatte Cookie fanges i Bekraeftelse-side
HttpCookie objCookie = new HttpCookie("myCookie", LastID.ToString());
Response.Cookies.Add( objCookie );
HttpCookie navnCookie = new HttpCookie("nameCookie", navn.ToString());
Response.Cookies.Add( navnCookie );
HttpCookie fil1Cookie = new HttpCookie("file1Cookie", fil1.ToString());
Response.Cookies.Add( fil1Cookie );
HttpCookie fil2Cookie = new HttpCookie("file2Cookie", fil2.ToString());
Response.Cookies.Add( fil2Cookie );
HttpCookie fil3Cookie = new HttpCookie("file3Cookie", fil3.ToString());
Response.Cookies.Add( fil3Cookie );
myConnection.Close();
Response.Redirect("bekraeftelse.aspx");
}
}
}   
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
InitializeComponent();
base.OnInit(e);
}
/// <summary>
private void InitializeComponent()
{   
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Avatar billede arne_v Ekspert
27. juli 2006 - 14:41 #1
den simple metode er at checke paa filnavns extension

den avancerede metoder er at checke paa om filens indhold faktisk matcher
(de fleste grafik formater har en magic header bestaaende af 2 eller 4 bytes
med fast indhold)
Avatar billede mema Nybegynder
27. juli 2006 - 16:02 #2
Den avancerede metode siger mig ikke ret meget. jeg er jo en begynder. Men det interesserer mig at vide hvordan tjekker man fx den magic header for en gif-fil?

Men tilbage til mit spørgsmål. Jeg har en kode set et eller andet sted på nettet. Men jeg kan ikke tilføje den i rigtige sted, sådan at den virker:-(
Koden er:
if (fileType1 != "image/jpeg" & fileType1 != "image/pjpeg" & fileType1 != "image/gif" & fileType2 != "image/jpeg" & fileType2 != "image/pjpeg" & fileType2 != "image/gif" & fileType3 != "image/jpeg" & fileType3 != "image/pjpeg" & fileType3 != "image/gif")
lblStor.Text = "sdjsldj.";

Hvis ovenstående linier virker, ville jeg gerne vide hvor i aspx.cs koden skulle jeg indsætte den?
Avatar billede arne_v Ekspert
27. juli 2006 - 16:29 #3
de foerste 3 bytes i GIF filer indeholder 'G' 'I' 'F'
Avatar billede arne_v Ekspert
27. juli 2006 - 16:33 #4
if ((fileSize1 > 500*1024) || (fileSize2 > 500*1024) || (fileSize3 > 500*1024))
{
lblStor.Text = "Du prøver at uploade et billede, der er større end 500 KB!";
}         

else if(...)
{
    ...
}
else
{

vil jeg tro
Avatar billede segato Nybegynder
28. juli 2006 - 09:38 #5
using System;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;


/// <summary>
/// Summary description for ImageInfo
/// </summary>
public class ImageChecker
{
    int m_imageHeight        = 1000;
    int m_imageWidth        = 1000;
    int m_imageSizeKiloByte = 1000000;

    string m_filepath = "";

    public bool IsFileValid(FileUpload uploadControl)
    {
        if (!uploadControl.HasFile)
            return false;

        if (!IsJPEG(uploadControl.PostedFile))
            return false;

        if (uploadControl.PostedFile.ContentLength > 500000)
            return false;

        if (!IsWithinDimension(MaxImageHeight, MaxImageWidth, uploadControl.PostedFile))
            return false;

        return true;
    }

    public string GetUniqueFileName()
    {
        return Guid.NewGuid().ToString().Substring(0, 8) + ".jpg";
    }

    public int MaxImageHeight
    {
        get {return m_imageHeight;}
        set { m_imageHeight = value; }
    }

    public int MaxImageWidth
    {
        get { return m_imageWidth; }
        set { m_imageWidth = value; }
    }

    public int MaxImageKiloByteSize
    {
        get { return m_imageSizeKiloByte; }
        set { m_imageSizeKiloByte = value; }
    }

    public string FilePath
    {
        get { return m_filepath; }
        set { m_filepath = value; }
    }

    bool IsJPEG(HttpPostedFile file)
    {
        switch (file.ContentType.ToString().ToLower())
        {
            case "image/pjpeg":
                return true;
        }
        return false;
    }

    bool IsWithinDimension(int height, int width, HttpPostedFile file)
    {
        Bitmap bitmap = new Bitmap(file.InputStream, false);

        if (bitmap.Width < width && bitmap.Height < height)
            return true;
       
        return false;
    }   
}
Avatar billede mema Nybegynder
28. juli 2006 - 12:33 #6
Det med:
if ((fileSize1 > 500*1024) || (fileSize2 > 500*1024) || (fileSize3 > 500*1024))
{
lblStor.Text = "Du prøver at uploade et billede, der er større end 500 KB!";
}       

else if(...)
{
    ...
}
else
{
----
virker desværre ikke. Jeg har prøvet det mange gange med forskellige varianter og forskellige placeringer. Derfor har jeg henvendt mig til Eksperten.dk.

Vedrørende segatos ImageChecker class, får jeg en fejlmeddelelse, når jeg compilerer classen. Compileren brokker sig over:
public bool IsFileValid(FileUpload uploadControl) og siger at "FileUpload" findes ikke!
Avatar billede segato Nybegynder
28. juli 2006 - 12:43 #7
FileUpload er en WebControl som uploader filer til en webserver. Men det er godt nok skrevet  i c# 2.0 kan være derfor du ikke kan bruge klassen.
Avatar billede mema Nybegynder
28. juli 2006 - 13:09 #8
Findes der ikke en udgave af classen i asp.net 1.1? fordi jeg bruger denne version?
Avatar billede segato Nybegynder
28. juli 2006 - 17:39 #9
http://aspalliance.com/781

Irretere mig lavede eb gang en klasse der kunne det men efter 2.0 smed jeg den væk da den mere eller mindre kan det hele. Men der er også en metode i det link jeg har smidt.
Avatar billede mema Nybegynder
30. juli 2006 - 19:01 #10
Hej segato,
Tak for svaret og url'en. Url'en er god, men det tager ikke højde for flere uploadsfelter i det samme skema. Alligevel synes jeg at du skal få points, selv om jeg ikke kunne løse problemet med image-type.

Send venligst et svar.
Avatar billede segato Nybegynder
30. juli 2006 - 19:24 #11
Lad tråden køre lidt længere og se om ikke andre har en god løsning. På mit eget site har jeg 5 fileupload kontroller som alle checker for fil type og størrelse. Så det kan lade sig gøre. Men lad tråden kører lidt videre er nyskeriig om der er andre med en enndnu bedre løsning. Jeg er ikke så meget ude efter points kigger bare med.
Avatar billede mema Nybegynder
30. oktober 2006 - 09:46 #12
Afslutter.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester