Mit dem Usercontrol URLControl von DNN kann man auf die interne Dateiverwaltung von DNN zugreifen.
Die Einbindung habe ich in einem anderen Artikel bereits erläutert. Hier nur noch kurz der benötigte Code für die ASCX-Datei:
<%@ Register TagPrefix="Portal" TagName="URL" Src="~/controls/URLControl.ascx" %>
<portal:url id="ctlURL" runat="server" width="300" showtabs="false" showfiles="true" showUrls="false" urltype="F" showlog="false" shownewwindow="false" showtrack="false"/>
Die Eigenschaft URL dieses Controls liefert allerdings bei der Auswahl von Dateien lediglich so etwas wie "FileId=7".
Um aber Bilder darstellen zu können muss dieses in einer URL umgewandelt werden. Die folgenden Funktion sind genau dafür da.
public string FileNameToImgSrc(string FileName)
{
string sSrc = GetRelativeFilePath(FileName) ;
return this.PortalSettings.HomeDirectory + sSrc;
}
public string GetRelativeFilePath(string FileName)
{
if (FileName.StartsWith("FileID="))
{
int fileId = int.Parse(FileName.Substring(7));
FileController objFileController = new FileController();
DotNetNuke.Services.FileSystem.FileInfo objFileInfo = objFileController.GetFileById(fileId, this.PortalId);
if (!(objFileInfo == null))
{
return objFileInfo.Folder + objFileInfo.FileName;
}
else
{
return "";
}
}
else
{
return FileName;
}
}