IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Sharepoint .NET Discussion :

Envoyer des images sur SharePoint via VB.NET


Sujet :

Développement Sharepoint .NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Logistics & Quality Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Logistics & Quality Manager
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Envoyer des images sur SharePoint via VB.NET
    Bonjour à tous,

    Voici donc mon soucis : J'ai développé pour mon entreprise un petit logiciel qui sert au service qualité. Le principe est que les opérateurs du contrôle qualité prennent des photos lorsqu'ils tombent sur un problème pour ensuite l'envoyer à nos différents fournisseurs. Le logiciel lit le code barre présent sur les photos des articles, en tire la référence, renomme, recadre et compresse l'image afin de l'envoyer sur un serveur SharePoint.

    Mon problème intervient au niveau de l'envoi sur le serveur SharePoint : actuellement pour envoyer les photos j'ai fait en sorte qu'un lecteur réseau soit créé sur l'ordinateur de l'opérateur, puis je fais un CopyFile depuis le dossier local sur le SharePoint via le lecteur réseau. Cette procédure prend énormément de temps (bien que ce soit des photos de l'ordre de 100 à 200Ko) car à chaque fichier copié, il doit accéder à nouveau au SharePoint via le lecteur réseau.

    En revanche un accès direct sur le site pour envoyer les photos manuellement prend moins de temps (à l'envoi) mais est extrêmement plus contraignant puisque les fichiers ne peuvent être envoyés qu'un par un.

    Pour mieux comprendre la routine, voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub SendNClose()
     
            Dim di As New System.IO.DirectoryInfo("S:")
     
            If Not di.Exists() Then
                MapDriveLetter.MapDrive("S", "\\LadresseDuSharePoint\")
            End If
     
            Dim Mois As String = Format(Now(), "MMMM")
            Dim An As String = Format(Now(), "yyyy")
            Dim Counter = My.Computer.FileSystem.GetFiles(PPM.LinkLabel.Text, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.jpg")
     
            PPM.ProgressBar.Minimum = 0
            PPM.ProgressBar.Maximum = 100
     
            Dim I As Integer = 0
     
            For Each foundFile As String In My.Computer.FileSystem.GetFiles(
        PPM.LinkLabel.Text,
        Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.jpg")
     
                Dim OnlyFileName As String = System.IO.Path.GetFileName(foundFile)
                Dim PathToSharePoint As String = "S:\" & An & "\" & Mois & "\" & OnlyFileName 
     
                On Error Resume Next
                My.Computer.FileSystem.CopyFile(foundFile, PathToSharePoint)
     
                I = I + 1
                Dim Percent As Integer = CInt(Math.Truncate(I / CStr(Counter.Count) * 100))
                PPM.ProgressBar.Value = Percent
     
            Next
     
            MsgBox("Téléchargement des fichiers sur le serveur terminé.", vbOKOnly, "Envoi terminé")
     
        End Sub
    Je développe via Microsoft Visual Basic 2010 Express, sur un poste qui utilise Windows 7 Entreprise en 64 bits. Le SharePoint quant à lui est en version 2007, je n'ai aucun contrôle direct sur le serveur. Par ailleurs, dans les paramètres du site SharePoint que je dois utiliser, il est spécifié "Version : 12.0.0.6557".

    Ça fait deux semaines que je cherche un moyen d'envoyer les photos sans passer par un lecteur réseau, j'ai trouvé un nombre conséquent d'exemples mais qui ne répondent pas à ma problématique, car dans 80% des solutions trouvées, il faut passer par la librairie Microsoft.SharePoint.dll qui se trouve côté serveur, or je suis côté client.

    La solution proposée par Microsoft (suivre ce lien) propose justement cette solution et je n'ai pas réussi le retranscrire en client (Microsoft.SharePoint.Client + Microsoft.SharePoint.Client.Runtime).

    J'ai tenté une autre solution (disponible à cette adresse) en l'adaptant selon mes possibilités et en virant la partie metadata :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            MessageBox.Show(UploadDocument("D:\Koala.jpg", "Koala.jpg"))
     
    End Sub
     
    Public Function UploadDocument(ByVal localFile As String, _
                        ByVal remoteFile As String) As String
            '// Read in the local file
            On Error GoTo handler
            Dim r As Byte()
            Dim Strm As System.IO.FileStream = New System.IO.FileStream(localFile, _
                        System.IO.FileMode.Open, System.IO.FileAccess.Read)
            Dim reader As System.IO.BinaryReader = New System.IO.BinaryReader(Strm)
            Dim filecontents As Byte() = reader.ReadBytes(CInt(Strm.Length))
            reader.Close()
            Strm.Close()
            Dim sSPURL As String = "https://ladressedusharepoint/sites/ppm_rmc/PPM%20RMC"
            Dim sUser As String = "*****"
            Dim sPwd As String = "*****"
            Dim sDomain As String = "https://ladressedusharepoint"
            Dim sRemoteFileURL As String
            Dim NC As System.Net.NetworkCredential = _
                New System.Net.NetworkCredential(sUser, sPwd, sDomain)
            sRemoteFileURL = sSPURL & "/" & Trim(LTrim(RTrim(remoteFile)))
     
            sRemoteFileURL = Replace(sRemoteFileURL, " ", "%20")
            sRemoteFileURL = Replace(sRemoteFileURL, "\", "/")
            Dim m_WC As WebClient = New WebClient
            m_WC.Credentials = NC
            r = m_WC.UploadData(sRemoteFileURL, "PUT", filecontents)
            Return "TRUE"
            Exit Function
    handler:
            Return Err.Description
        End Function
    Mais à ce niveau là j'obtient une erreur du site SharePoint qui déclare "Le serveur distant a retourné une erreur: (401) Non autorisé."

    Dans le même genre j'ai essayé cette solution, en prenant soin d'ajouter les références Microsoft.SharePoint.Client + Microsoft.SharePoint.Client.Runtime, mais au moment de lancer le programme, Visual Studio me sort trois avertissements qui génèrent eux-même des erreurs, alors que lors de la programmation tout va bien :

    Nom : Erreurs.PNG
Affichages : 464
Taille : 44,9 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            MessageBox.Show(UploadDocument("TestFile1.txt", "D:\\TestUpload1.txt", metaData))
     
        End Sub
     
        Public Function UploadDocument(fileName As String, filePath As String, metaDataDictionary As Dictionary(Of String, String)) As Boolean
            Dim ctx As New ClientContext("https://ladressedusharepoint/sites/ppm_rmc/")
            Dim currentWeb As Web = ctx.Web
     
            Dim fileToUpload As FileCreationInformation = New FileCreationInformation
     
            fileToUpload.Content = System.IO.File.ReadAllBytes(filePath)
            fileToUpload.Url = "https://ladressedusharepoint/sites/ppm_rmc/PPM%20RMC/" + fileName
            Dim docLib As Microsoft.SharePoint.Client.List = currentWeb.Lists.GetByTitle("PPM RMC")
     
            Dim uploadedFile As Microsoft.SharePoint.Client.File = docLib.RootFolder.Files.Add(fileToUpload)
            ctx.Load(uploadedFile)
            ctx.ExecuteQuery()
            Return True
        End Function
    Je commence vraiment à sécher sur les solutions possibles pour faire en sorte que l'upload des images soit plus rapide sans passer obligatoirement par une page d'application pour SharePoint ou un service web se servant d'ASP.NET (d'autant que je ne sais pas du tout si cela pourrait fonctionner ... !).

    J’espère avoir été aussi clair que possible.

    Merci d'avance à tous,

    Vincent.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Logistics & Quality Manager
    Inscrit en
    Octobre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Logistics & Quality Manager
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2013
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour à tous,

    Je reviens vers mon message original car j'ai fini par trouver la solution! Alors dans le cas ou ça pourrait servir plus tard, je suis tombé sur cet article qui une fois de plus proposait de faire une application web en ASP.NET, sauf que le code en VB concernant le sub "UploadFileToSharePoint" correspondait exactement à mes attentes! Pour le coup ce n'est quasi qu'un copier/coller qu'il a fallu faire, j'ai simplement appelé le sub au clic d'un bouton dans mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            Module1.UploadFileToSharePoint("C:\ChemindAccesVersVotreFichier\NomDuFichier.Ext", "http://URLDeVotreSharePoint/BibliothèqueDansLaquelleVousEnvoyezLeFichier/NomDuFichier.Ext")
     
        End Sub
    Puis le code du sub UploadFileToSharePoint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sub UploadFileToSharePoint(ByVal UploadedFilePath As String, _
                   ByVal SharePointPath As String)
     
            Dim response As WebResponse = Nothing
     
            Try
                ' Create a PUT Web request to upload the file.
                Dim request As WebRequest = _
                    WebRequest.Create(SharePointPath)
     
                request.Credentials = CredentialCache.DefaultCredentials
                'Dans le cas ou il y aurait besoin de s'identifier sur le SP avant de continuer
                'Mettez en commentaire l'instruction "request.Credentials = CredentialCache.DefaultCredentials"
                'Et dé-commentez la ligne ci-dessous
                'request.Credentials = New NetworkCredential("UserName", "PassWord")
                request.Method = "PUT"
     
                ' Allocate a 1 KB buffer to transfer the file contents.
                ' You can adjust the buffer size as needed, depending on
                ' the number and size of files being uploaded.
                Dim buffer() As Byte = New Byte(1023) {}
     
                ' Write the contents of the local file to the
                ' request stream.
                Using stream As Stream = request.GetRequestStream()
                    Using fsWorkbook As FileStream = _
                        File.Open(UploadedFilePath, _
                            FileMode.Open, FileAccess.Read)
                        Dim i As Integer = fsWorkbook.Read(buffer, 0, _
                            buffer.Length)
     
                        Do While i > 0
                            stream.Write(buffer, 0, i)
                            i = fsWorkbook.Read(buffer, 0, buffer.Length)
                        Loop
     
                    End Using
                End Using
     
                ' Make the PUT request.
                response = request.GetResponse()
            Catch ex As Exception
                Throw ex
            Finally
                response.Close()
            End Try
     
        End Sub
    Je me suis passé de toute la partie Button1_Click fournie sur le site car j'en avais pas besoin. Comparé à l'accès au lecteur réseau + l'envoi des images, la méthode ci-dessus me prend 50% de temps en moins, c'est bien plus que ce que j'avais espéré à la base.

    NB: Dans mon cas l'adresse vers le SharePoint est en HTTPS et ça ne pose vraiment aucun soucis.

    Bon codage à tous,

    Vincent.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer des message sur via le port 465 (smtp/ssl)
    Par yuriyan dans le forum Framework .NET
    Réponses: 0
    Dernier message: 02/08/2013, 16h27
  2. impossibe d'envoyer des données sur le net
    Par sami_c dans le forum Windows XP
    Réponses: 6
    Dernier message: 13/08/2011, 09h33
  3. [Upload] Uploader des images sur mon serveur
    Par arti2004 dans le forum Langage
    Réponses: 13
    Dernier message: 12/07/2006, 11h25
  4. Afficher des images sur une grille
    Par Coussati dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/10/2005, 09h27
  5. envoyer des images avec access
    Par dan664 dans le forum Access
    Réponses: 6
    Dernier message: 13/10/2005, 21h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo