I'v found the solution by myself looking de source code of DNN proyects.
The next piece of code uploads a file using secure system file (type 1)
Private Function SubirArchivo() As Boolean
If FileUploadAdjuntos.HasFile Then
If ((Not FileUploadAdjuntos.PostedFile Is Nothing) And (FileUploadAdjuntos.PostedFile.ContentLength > 0)) Then
Try
'Se obtienen el nombre del archivo y el archivo físico
Dim fileName As String = System.IO.Path.GetFileName(FileUploadAdjuntos.PostedFile.FileName)
Dim NewFileName As String = Me.Session.SessionID & "_" & fileName
Dim filePath As String = System.IO.Path.Combine(PortalSettings.HomeDirectoryMapPath & _CarpetaAdjuntos, NewFileName)
'Si ya existe se borra
Dim YaExiste As Boolean = False
For Each Archivo As ListItem In LbAdjuntos.Items
If fileName = Archivo.Text Then
YaExiste = True
FileSystemUtils.DeleteFile(Archivo.Value)
Archivo.Value = filePath
End If
Next
Dim postedFile As HttpPostedFile = FileUploadAdjuntos.PostedFile
Dim strMessage As String = FileSystemUtils.UploadFile((PortalSettings.HomeDirectoryMapPath & _CarpetaAdjuntos & "\").Replace("/", "\"), postedFile, NewFileName, False)
If strMessage <> "" Then
'LbAdjuntos.Visible = False
'BtnAdjuntosAgregar.Visible = False
'BtnAdjuntosQuitar.Visible = False
'FileUploadAdjuntos.Visible = False
'Me.PanelAdjuntos.Controls.Add(New LiteralControl("<p class='Normal'>" & strMessage & "</p>"))
Exit Function
End If
'se agrega al listado
If Not YaExiste Then LbAdjuntos.Items.Add(New ListItem(fileName, filePath))
'se oculta o no el botón quitar
BtnAdjuntosQuitar.Visible = (LbAdjuntos.Items.Count > 0)
Return True
Catch ex As Exception
PanelAdjuntos.Visible = False
DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, ex.Message, Skins.Controls.ModuleMessage.ModuleMessageType.RedError)
End Try
Else
DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, "seleccione un archivo", Skins.Controls.ModuleMessage.ModuleMessageType.RedError)
End If
Else
Return False
End If
'HttpContext.Current.Trace.Write("Uploads(): txtFileName.Text=" & txtFileName.Text)
End Function
I use this other piece to generate the links. Only users which has permisions can download the files:
...
While Archivos.Read()
Dim objFileController As New DotNetNuke.Services.FileSystem.FileController
Dim FileName As String = Archivos("Archivo").ToString.Replace("/", "\").ToLower.Replace(HomeDirecTory.ToLower.Replace("/", "\"), "").Replace(_CarpetaAdjuntos.ToLower.Replace("/", "\"), "").Replace("\", "")
Dim objFolder As DotNetNuke.Services.FileSystem.FolderInfo = FileSystemUtils.GetFolder(PortalId, _CarpetaAdjuntos)
Dim objFile As DotNetNuke.Services.FileSystem.FileInfo = objFileController.GetFile(FileName, PortalId, objFolder.FolderID)
Dim FileLink As String = DotNetNuke.Common.Globals.LinkClick("fileid=" & objFile.FileId.ToString, Me.PortalSettings.ActiveTab.TabID, -1)
EnlacesArchivos &= "<a href='" & FileLink & "' target='_blank' Class='Normal' width='100%'><img src='" & Icono(Archivos("Nombre")) & "' border='0' align='absmiddle'/> " & Archivos("Nombre") & "</a> "
End While
...
LinkClick function retunrs each url to FileLink an the result is something like this: http://......./LinkClick.aspx?fileticket=INguERx0CBc%3d&tabid=140
Enjoy it!!!!!