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)
¡Importante! Solo se puede modificar un archivo que ya existe en el servidor. Para modificar el archivo, 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 multipart/form-data. Cuerpo de la solicitud:"\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;
}
