Bonjour.
Voici mon premier Service Web en c#. A cette occasion, j'aimerais bénéficier d'un petit coup de main svp.
Je dois uploader un fichier vers mon serveur, celui-ci étant d"coupé en plusieurs morceaux car il est très volumineux !
Imaginons que nous envoyons 5 fichier .sdf :
voici mon fichier ICheckpointWebService.cs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 mon_fichier.sdf.part1 mon_fichier.sdf.part2 mon_fichier.sdf.part3 mon_fichier.sdf.part4 mon_fichier.sdf.part5
et mon fichier CheckpointWebServiceImpl.svc :
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 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace CheckpointWebWcfService { [ServiceContract] public interface ICheckpointWebService { [OperationContract] void UploadFile(RemoteFileInfo request); } [MessageContract] public class RemoteFileInfo : IDisposable { [MessageHeader(MustUnderstand = true)] public string FileName; [MessageHeader(MustUnderstand = true)] public long Length; [MessageBodyMember(Order = 1)] public System.IO.Stream FileByteStream; public void Dispose() { if (FileByteStream != null) { FileByteStream.Close(); FileByteStream = null; } } } }
Bon, voilà ce que je comptais faire :
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 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; using System.Text; namespace CheckpointWebWcfService { public class CheckpointWebServiceImpl : ICheckpointWebService { public void UploadFile(RemoteFileInfo request) { FileStream targetStream = null; Stream sourceStream = request.FileByteStream; string filePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "TemporaryFiles", request.FileName); using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = XXX; byte[] buffer = new byte[bufferLen]; // ... targetStream.Close(); sourceStream.Close(); } } } }
- Je transfère des fichiers par morceaux de X Mo maximum.
- Je les copie dans un répertoire de fichiers temporaires sur mon serveur (TemporaryFiles).
- Si un morceau fait moins de X Mo, soit il s'agit du dernier fichier, soit il s'agit d'un fichier qui était assez petit pour ne pas être découpé.
- Une fois qu'ils sont tous transférés, je le recolle et je les transfère dans un autre dossier où ils seront stockés.
Quelle est la taille d'un fichier souhaitée pour un transfert optimal ? 9a représente quoi pour la taille du buffer ?
Comment enregistrer un fichier temporaire ?
Comment recoller mes fichiers temporaires ?
Merci.
Partager