2009-10-05 16 views
17

Quando imposto la proprietà URL dell'immagine al controllo immagine asp che si trova nella cartella App_Data, l'immagine viene visualizzata nella visualizzazione struttura di pagina ma non nel browser.Immagini che si trovano nella cartella App_Data non visualizzate nel browser

<form id="form1" runat="server"> 
<div> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" /> 
</div> 
</form> 

Sembra semplice, ma non mostra l'immagine.

risposta

38

La cartella App_Data è una cartella speciale riservata per dati come i file di database e così via, e NON visualizza tutti i contenuti sul web. Questo è di progettazione e intenzionale e non può essere modificato (per quanto ne so).

Le immagini non appartengono alla sottocartella App_Data - inserirle in una cartella /images o qualcosa di più appropriato.

8

Le immagini non devono mai essere archiviate nella cartella App_Data. Questo è riservato ai file che non dovrebbero mai essere pubblicati direttamente all'utente, come i file di database .mdb, ecc.

Vorrei creare una cartella dalla radice del sito creando una cartella /Resources o /Resources/Images.

+0

Grazie Chris ... –

+0

Ciao a tutti, ma il problema è quando provo a creare la cartella '/ Resources/Images' nella radice quindi ottengo l'accesso negato errore (quando il sito è ospitato in IIS) .WHat è l'approccio migliore per creare la directory nella radice per l'account utente di IIS w./o dando l'autorizzazione per l'account utente sull'intera directory root? È possibile a tutti? .Vedo l'errore di accesso negato quando provo a creare la directory all'interno della root . – Sagar

3

OK, è ora di fare l'impossibile ... Mentre non è possibile caricare immagini direttamente dalla cartella app_data, è possibile scrivere il proprio gestore http che leggerà il file immagine dalla cartella app_data e lo invierà al client. Sarebbe una soluzione, ma in generale i dati sono pensati per dati che solo la tua applicazione può leggere. Avendo un gestore che legge i dati, è ancora possibile restituire quelle immagini.

Ma è una cattiva pratica e se lavorassi per me, verrai immediatamente licenziato !!!

+2

Anche pensare a come aggirare asp.net per consentire che le immagini vengano pubblicate da app_data è una cattiva idea ... –

+0

Grazie per aver condiviso un'idea. –

+2

@Chris, sono d'accordo! Mi licenzierò! ;-) –

4

Non sono d'accordo. Quando si nascondono le immagini nella cartella App_Data e si crea il proprio gestore http, le immagini vengono protette e possono aggiungere testo di copyright, ecc. Sulle immagini prima di mostrarle.

Faccio questo quando ho le immagini di alta risoluzione che non desidero ottenere a tutti, e fare in modo che il gestore http riduca l'immagine e inserisca un testo di copyright. Grande!

0

I contenuti della cartella App_Data possono essere serviti ma non direttamente.
L'accesso diretto non è possibile e indiretto non è raccomandato. È intenzionale.

tuttavia aggiungere un percorso virtuale può farlo. Vedi questo question


Penso che la risposta a tre migliori serva al tuo scopo.
Memorizzate le immagini nella cartella delle risorse sia globali che locali, queste sono anche cartelle speciali e il contenuto è accessibile a livello di programmazione.

0

Dipende! ;)

Ci sono buoni motivi per salvare le immagini in App_Data. In situazioni in cui gli utenti possono caricare i propri file o loghi, proteggerà questi file e non li renderà accessibili ad altri utenti o pubblici.

Più importante, è l'unico modo per avere file diversi per server/istanza di distribuzione.

Quando si distribuisce l'app, è possibile proteggere questi file caricati dagli utenti per istanza del server abilitando "Escludi file da App_Data" nella configurazione di distribuzione.

Se si desidera accedere a questi file tramite url utilizzare un gestore di download, ad esempio downloadfile.ashx.

Spero che questo aiuti.

Problemi correlati