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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| public static string BlobAttach(string path,
string fileName,
bool attachAsPrincipalFile)
{
string boundary = DateTime.Now.Ticks.ToString("x");
return HttpPostRequest.SendMultiPart(Credentials,
BaseUrlNuxeo + Resources.BlobAttach,
NuxeoHeader.BlobAttach(fileName,
path,
boundary,
attachAsPrincipalFile),
boundary,
Resources.TempAttachment + fileName);
}
public static string SendMultiPart(NetworkCredential credentials,
string url,
string header,
string boundary,
string filePath)
{
HttpWebRequest requestSendMultiPart = WebRequest.Create(url) as HttpWebRequest;
if (requestSendMultiPart == null)
throw new NullReferenceException(string.Format(fr_lang.ERROR_uri_unreachable,
url));
requestSendMultiPart.Method = "POST";
requestSendMultiPart.Accept = "application/json+nxentity, */*";
requestSendMultiPart.ContentType = "multipart/related; type=\"application/json+nxrequest\"; start=\"request\"; charset=UTF-8\r\n";
requestSendMultiPart.Headers.Add("X-NXVoidOperation: true");
requestSendMultiPart.Credentials = credentials;
var postHeaderBytes = Encoding.UTF8.GetBytes(header);
var boundaryBytes = Encoding.ASCII.GetBytes(string.Format("\r\n--{0}--\r\n", boundary));
FileStream fileStream = null;
Stream responseStream = null;
Stream requestStream = null;
StreamReader responseStreamReader = null;
try
{
fileStream = new FileStream(filePath,
FileMode.Open,
FileAccess.Read);
// Ligne qui fait ralentir de 20 secondes le temps de réponse.
//requestSendMultiPart.ContentLength = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length;
requestStream = requestSendMultiPart.GetRequestStream();
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
var buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
requestStream.Write(buffer, 0, bytesRead);
fileStream.Close();
// Ajout du boundary de fin.
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
requestStream.Close();
responseStream = requestSendMultiPart.GetResponse().GetResponseStream();
if (responseStream == null)
throw new NullReferenceException(fr_lang.ERROR_no_response);
//StreamReader implémente TextReader qui lit les caractères à partir d'un flux d'octets dans un encodage particulier
responseStreamReader = new StreamReader(responseStream);
return responseStreamReader.ReadToEnd();
}
finally
{
if (requestStream != null)
requestStream.Dispose();
if (fileStream != null)
{
fileStream.Close();
fileStream.Dispose();
}
if (responseStreamReader != null)
{
responseStreamReader.Close();
responseStreamReader.Dispose();
}
if (responseStream != null)
{
responseStream.Close();
responseStream.Dispose();
}
}
public static string BlobAttach(string fileName,
string nuxeoPath,
string boundary,
bool attachAsPrincipalFile)
{
var header = new StringBuilder();
header.AppendFormat("--{0}\r\n",
boundary);
header.Append("Content-Type: application/json+nxrequest; charset=UTF-8\r\n");
header.Append("Content-Transfer-Encoding: 8bit\r\nContent-ID: request\r\n\r\n");
if (attachAsPrincipalFile)
header.AppendFormat("{{\"params\":{{\"document\":\"{0}\"}},\"context\":{{}}}}",
nuxeoPath);
else
header.AppendFormat("{{\"params\":{{\"document\":\"{0}\",\"xpath\":\"files:files\"}},\"context\":{{}}}}",
nuxeoPath);
header.AppendFormat("\r\n\r\n--{0}\r\n",
boundary);
header.AppendFormat("Content-Type: {0}\r\n",
FileType.GetMimeTypeFromFile(fileName));
header.Append("Content-Transfert-Encoding: binary\r\n");
header.AppendFormat("Content-Disposition: attachment; filename=\"{0}\";\r\n",
fileName);
header.Append("Content-ID: input\r\n\r\n");
return header.ToString();
} |
Partager