Per il progetto della libreria mi è capitato di dover ridefinire i metodi equals e hashCode.

Il primo, come si può capire dal nome stesso, serve per controllare l'uguaglianza tra due oggetti.

Questo metodo è legato all'altro, così che se viene ridefinito uno deve essere ridefinito anche l'altro.

Questo perchè l'uguaglianza si basa appunto su un codice hash, che viene trovato dal metodo hashCode.

Detto ciò vi posto tutta la classe:

public class Author {

private int id;
private String name;

public Author(String name) {
this.name = name;
}

public Author(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

@Override
public String toString() {
return name;
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof Author)) {
return false;
}
Author a = (Author) obj;
return this.name.equals(a.toString());
}

@Override
public int hashCode() {
int hash = 3;
hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
}

E' una classe che rappresenta la tabella autori nel mio db (la stessa cosa l'ho fatta sugli editori).

A noi interessano gli ultimi due metodi.

Oggi vi spiego come impostare un upload in Asp.NET e C# con un controllo sull'estensione e la dimensione.

Prima di tutto nella pagina aggiungiamo il controllo che ci serve:

<asp:FileUpload ID="FileUpload1" runat="server" />

<asp:Button ID="Submit" runat="server" Text="Submit" OnClick="insertFile" />

Si tratta di due controlli:

  • un per scegliere quale file caricare
  • un pulsante che richiama il metodo insertFile scritto nel code-behind

Fatto ciò andiamo a modificare il file Web.config per impostare la dimensione massima e le estensioni:

<system.web>
<httpRuntime  maxRequestLength="10240000" executionTimeout="360"/>
</system.web>

<appSettings>
<add key="audioExt" value="mp3 ogg flac"/>
</appSettings>

httpRuntime determina le modalità di elaborazione di una richiesta.

maxRequestLength determina la dimensione massima espressa in KB.

executionTimeout è il numero massimo di secondi.

Ovviamente cercate di impostare dei valori che corrispondano: è inutile accettare dimensioni grando e impostare un timeput troppo piccolo.

Inolre considerate che questo valore vale per tutti gli eventuali upload: se volete impostare dimendioni diverse (ad esempio per immagini, video e audio) dovete fare un controllo a mano.

appSettings invece contiene le impostazioni personali.

Abbiamo aggiunto una key impostando come valore le nostre estensioni (separate da spazio, ma potete mettere anche un segno, stando attenti ai caratteri speciali).

Possiamo avere anche più key; ad esempio un'altra per le estensioni dei file video.

Split e indexOf sono due metodi della classe String molto utili.

Split serve per spezzare la stringa nel punto che corrisponde alla regex passatagli come argomento (ad esempio "-" spezza la stringa nei punto dove incontra il trattino); il risultato è un array di stringhe.

indexOf ricerca nella stringa ciò che gli viene passato come argomento; se no trova nessna corrispondenza ritorna -1.

E' possibile dargli anche un secondo parametro sotto forma di intero che indica da dove deve partire la ricerca.

Vediamo come usare questi due metodi per estrapolare solo ciò che ci serve da una stringa.

Prendiamo come esempio questa stringa: "parola1 parola-2 parola-3 parola-4 parola5".

Voglio estrapolare solo le parole che non hanno il trattino.

Prima di tutto usiamo split per spezzare la stringa in corrispondenza degli spazi, ottenendo così un array di tutte le parole.