[VB.Net][2.0] Comment supprimer un fichier sur le client après envoi au serveur ?
Bonjour tous le monde,
J'ai un petit souci avec l'exportation d'un fichier excel vers le client.
Je vous explique le cheminement de ma page. C'est une page de recher dans l'annuaire de la société. J'affiche les résultats de la recherche dans un datagrid.
A ce moment j'ai la possibilité d'imprimer ou d'exporter les résultats vers Excel.
Mon problème concerne l'exportation vers Excel (j'ai pas encore attaqué l'impression :D )
Je dois créer un fichier excel sur le serveur (crypté de telle sorte que quand on essaye de l'ouvrir avec le bloc note on obtient de très jolis hiéroglyphes), l'envoyer au client puis supprimer ce fichier.
Je sais c'est compliqué mais c'est ce qui m'a été demandé.
Ce qui m'embète c'est la suppression, elle s'effectue avant que le client n'est télécharger le fichier.
Vu que mes explications ont l'air un peu brouillon je vous mets mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
Protected Sub BtExport_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles BtExport.Click
Dim ds As Data.DataSet
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim oRow As Data.DataRow
Dim oCol As Data.DataColumn
Dim nCol As Integer = 0
Dim nRow As Integer = 1
'Dim i As Integer
'Recuperation du datagrid
ds = Session("dsAnnuaire")
'Generation du fichier excel
xlApp = New Excel.Application
xlApp.Visible = False
xlBook = xlApp.Workbooks.Add
xlSheet = xlApp.Sheets(1)
'Ecriture du nom des colonnes
For Each oCol In ds.Tables(0).Columns
If oCol.ColumnName <> "PHOTO" And oCol.ColumnName <> "PHOTOALT" Then
nCol += 1
xlSheet.Cells(1, nCol) = oCol.ColumnName
End If
Next oCol
'Ecriture des données du datagrid dans les colonnes
For Each oRow In ds.Tables(0).Rows
nCol = 0
nRow += 1
For Each oCol In ds.Tables(0).Columns
If oCol.ColumnName <> "PHOTO" And oCol.ColumnName <> "PHOTOALT" Then
nCol += 1
xlSheet.Cells(nRow, nCol) = oRow(oCol.ColumnName).ToString()
End If
Next oCol
Next oRow
'Sauvegarde du fichier Excel
xlSheet.SaveAs(Server.MapPath("Template") + "\" + Session("matricule") + ".xls")
'Fermeture de l'application Excel
xlSheet = Nothing
xlBook = Nothing
If Not IsNothing(xlApp) Then
xlApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlApp = Nothing
End If
'Envoie du fichier au client
Response.Clear()
Response.ContentType = "application/x-msexcel"
Response.AddHeader("Content-Disposition", "inline; filename=Annuaire.xls")
'Response.WriteFile(Server.MapPath("Template") + "\" + Session("matricule") + ".xls")
Response.TransmitFile(Server.MapPath("Template") + "\" + Session("matricule") + ".xls")
'Delete du fichier sur le serveur
System.IO.File.Delete(Server.MapPath("Template") + "\" + Session("matricule") + ".xls")
End Sub |
Voilà comme ça ce sera peut-être plus clair.
Donc le fichier s'efface du serveur avant que le navigateur lui ai proposé de le récupérer sur son poste. Je suis sur que ca vient de là car si j'enléve le Delete du fichier, le Download s'effectue sans problème et le fichier Excel généré est exactement ce que je veux.
Si quelqu'un pouvait m'aider ou aurait une autre méthode à me proposer ça m'aiderai grandement.
Merci d'avance à tous et bon code ;) ;) ;)