Cargar archivos desde el servidor
Para cargar un archivo desde el servidor, se debe crear una solicitud al servidor (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). El método de la solicitud debe ser POST y el contenido debe ser de tipo application/x-www-form-urlencoded. Los resultados deben guardarse en un archivo nuevo. Cuerpo de la solicitud:"Action=Load" +"&sessionId=" + session + "&objectType=" + objectType + "&projectId=" + projectId + "&batchId=" + batchId + "&objectId=" + objectId + "&version=" + version + "&streamName=" + streamName
static private CredentialCache basicAuthenticationCredentialCache = null;
public static List<byte> POSTLoadFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, int parentId, string streamName)
{
List<byte> result = new List<byte>();
HttpWebResponse response = null;
Stream responseStream = null;
BinaryReader reader = null;
try
{
// creación de la solicitud
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// configuración de autenticación al conectarse al servicio web
if (basicAuthenticationCredentialCache != null)
{
request.Credentials = basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials = true;
}
request.ContentType = "application/x-www-form-urlencoded";
string postData = "Action=Load" +
"&sessionId=" + session +
"&objectType=" + objectType +
"&projectId=" + projectId +
"&batchId=" + batchId +
"&parentId=" + parentId +
"&objectId=" + objectId +
"&version=" + version +
"&streamName=" + streamName;
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(postData);
writer.Close();
// recepción de la respuesta
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
reader = new BinaryReader(responseStream);
int responseStreamLength = 0;
while (true)
{
try
{
result.Add(reader.ReadByte());
responseStreamLength++;
}
catch (EndOfStreamException)
{
break;
}
}
reader.Close();
responseStream.Close();
response.Close();
}
if (response != null) response.Close();
if (responseStream != null) responseStream.Close();
if (reader != null) reader.Close();
return result;
}
Carga de archivos al servidor
Debe abrir un archivo existente y leer sus datos (la cadena “content” debe obtenerse del archivo binario mediante Encoding.Default). Para guardar el archivo, debe crearse una solicitud al servidor (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). El método de la solicitud debe ser POST y el contenido debe ser de tipo multipart/form-data. Cuerpo de la solicitud:"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nSave" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + streamNameInBase64 + // nombre del flujo binario en Base64
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n"+ // el valor del parámetro filename no afecta a la solicitud en sí
content + //datos que se cargan al servidor
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// la cadena "content" debe obtenerse del archivo binario usando Encoding.Default
public static List<byte> POSTSaveFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName, string content)
{
List<byte> result = new List<byte>();
HttpWebResponse response = null;
Stream responseStream = null;
StreamReader reader = null;
int requestId = Environment.TickCount;
try
{
// creación de la solicitud
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// configuración de autenticación al conectarse al servicio web
if (basicAuthenticationCredentialCache != null)
{
request.Credentials = basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials = true;
}
request.ContentType = "multipart/form-data, boundary=" + requestId;
byte[] streamNameInBytes = Encoding.Unicode.GetBytes(streamName);
UnicodeEncoding UTFencofing = new UnicodeEncoding();
string postData = "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nSave" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + Convert.ToBase64String(streamNameInBytes) +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
postData += content;
postData += "\r\n--" + requestId + "--\r\n";
StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.Default);
writer.Write(postData);
writer.Close();
// recepción de una respuesta
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
reader = new StreamReader(responseStream);
reader.Close();
responseStream.Close();
response.Close();
}
if (response != null) response.Close();
if (responseStream != null) responseStream.Close();
if (reader != null) reader.Close();
return result;
}
Obtención de una suma de comprobación
Para obtener una suma de comprobación, se debe crear una solicitud al servidor (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). El método de la solicitud debe ser POST y el contenido debe ser del tipo application/x-www-form-urlencoded. Cuerpo de la solicitud:"Action=Checksum" + "&sessionId=" + session + "&objectType=" + objectType + "&projectId=" + projectId + "&batchId=" + batchId + "&objectId=" + objectId + "&version=" + version + "&streamName=" + streamName
static private CredentialCache basicAuthenticationCredentialCache = null;
public static List<byte> POSTGetChecksum(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName)
{
List<byte> result = new List<byte>();
HttpWebResponse response = null;
Stream responseStream = null;
BinaryReader reader = null;
try
{
// creación de la solicitud
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// configuración de autenticación al conectarse al servicio web
if (basicAuthenticationCredentialCache != null)
{
request.Credentials = basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials = true;
}
request.ContentType = "application/x-www-form-urlencoded";
string postData = "Action=Checksum" +
"&sessionId=" + session +
"&objectType=" + objectType +
"&projectId=" + projectId +
"&batchId=" + batchId +
"&objectId=" + objectId +
"&version=" + version +
"&streamName=" + streamName;
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(postData);
writer.Close();
// recepción de una respuesta
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
reader = new BinaryReader(responseStream);
int responseStreamLength = 0;
while (true)
{
try
{
result.Add(reader.ReadByte());
responseStreamLength++;
}
catch (EndOfStreamException)
{
break;
}
}
reader.Close();
responseStream.Close();
response.Close();
}
if (response != null) response.Close();
if (responseStream != null) responseStream.Close();
if (reader != null) reader.Close();
return result;
}
Carga por partes (modificación de un archivo existente)
Solo se puede modificar un archivo que ya existe en el servidor.
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nAppend" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + streamNameInBase64 +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n" +
content + //esta cadena debe obtenerse de la misma manera que en el ejemplo anterior
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset + //el desplazamiento desde el inicio del archivo donde comienza la entrada
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// la cadena "content" debe obtenerse del archivo binario usando Encoding.Default
// Nota: solo puede agregar contenido a un archivo que ya existe, lo que significa que primero debe crear un archivo con el método POSTSaveFile
public static List<byte> POSTAppendFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName, string content, int offset)
{
List<byte> result = new List<byte>();
HttpWebResponse response = null;
Stream responseStream = null;
StreamReader reader = null;
int requestId = Environment.TickCount;
try
{
// creación de la solicitud
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// configuración de autenticación al conectarse al servicio web
if (basicAuthenticationCredentialCache != null)
{
request.Credentials = basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials = true;
}
request.ContentType = "multipart/form-data, boundary=" + requestId;
byte[] streamNameInBytes = Encoding.Unicode.GetBytes(streamName);
UnicodeEncoding UTFencofing = new UnicodeEncoding();
string postData = "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nAppend" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + Convert.ToBase64String(streamNameInBytes) +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
postData += content;
postData += "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset;
postData += "\r\n--" + requestId + "--\r\n";
StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.Default);
writer.Write(postData);
writer.Close();
// recepción de la respuesta
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
// visualización de la respuesta
reader = new StreamReader(responseStream);
reader.Close();
responseStream.Close();
response.Close();
}
if (response != null) response.Close();
if (responseStream != null) responseStream.Close();
if (reader != null) reader.Close();
return result;
}
