サーバーからのファイルのロード
サーバーからファイルをロードするには、サーバーへのリクエストを作成する必要があります (AppServerURL + “/FlexiCapture12/Server/FileService/v1”) 。リクエストメソッド は POST にし、contents は application/x-www-form-urlencoded 型である必要があります。結果は新しいファイルに記録する必要があります。 リクエスト本文:"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
{
// リクエストの作成
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// 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();
// レスポンスの受信
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;
}
サーバーへのファイルのアップロード
既存のファイルを開き、そこからデータを読み取る必要があります (“content” 文字列は、Encoding.Default を使用してバイナリファイルから取得する必要があります) 。 ファイルを保存するには、サーバーへのリクエストを作成する必要があります (AppServerURL + “/FlexiCapture12/Server/FileService/v1”) 。リクエスト メソッドは POST、contents は multipart/form-data 型にする必要があります。 リクエスト本文:"\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 + // バイナリストリームの名前(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"+ // filenameパラメータの値はリクエスト自体に影響しない
content + //サーバーにアップロードされるデータ
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// "content" 文字列は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
{
// リクエストの作成
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// 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();
// レスポンスの受信
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;
}
チェックサムの取得
チェックサムを取得するには、サーバーへのリクエストを作成する必要があります (AppServerURL + “/FlexiCapture12/Server/FileService/v1”) 。リクエストメソッドは POST、contents の型は application/x-www-form-urlencoded にする必要があります。 リクエスト本文:"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
{
// リクエストの作成
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// 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();
// レスポンスの受信
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;
}
分割ロード (既存ファイルの変更)
重要! 変更できるのは、サーバー上にすでに存在するファイルのみです。 ファイルを変更するには、サーバーへのリクエストを作成する必要があります (AppServerURL + “/FlexiCapture12/Server/FileService/v1”) 。リクエストメソッドは POST で、内容の型は multipart/form-data である必要があります。 リクエスト本文:"\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 + //この文字列は前の例と同じ方法で取得してください
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset + //エントリが開始するファイル先頭からのオフセット
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// "content" 文字列は Encoding.Default を使用してバイナリファイルから取得してください
// 注意: 追加できるのは既存のファイルのみです。事前に 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
{
// リクエストの作成
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
request.Method = "POST";
// 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();
// レスポンスの受信
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;
}
