例
このセクションでは、ファイルの作業をするため、下記にPOSTリクエストの例を示します:
サーバーからのファイルの読み込み
サーバーからファイルを読み込むには、サーバーリクエストを作成しなければなりません(AppServerURL + "/FlexiCapture12/Server/FileService/v1")。リクエスト方法はPOSTでなければならず、コンテンツはアプリケーション/x-www-form-urlencoded タイプのものでなければなりません。結果は新規ファイルに記録しなければなりません。
リクエスト本体:
"Action=Load"+"&sessionId="+session+"&objectType="+objectType+"&projectId="+projectId+"&batchId="+batchId+"&objectId="+objectId+"&version="+version+"&streamName="+streamName
staticprivateCredentialCachebasicAuthenticationCredentialCache=null;
publicstaticList<byte>POSTLoadFile(stringAppServerURL,intsession,intprojectId,intbatchId,intobjectType,intobjectId,intversion, int parentId,stringstreamName)
{
List<byte>result=newList<byte>();
HttpWebResponseresponse=null;
StreamresponseStream=null;
BinaryReaderreader=null;
try
{
// リクエストの新規作成
HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(AppServerURL+"/FlexiCapture12/Server/FileService/v1");
request.Method="POST";
//ウェブサービスへの接続時の認証セットアップ
if(basicAuthenticationCredentialCache!=null)
{
request.Credentials=basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials=true;
}
request.ContentType="application/x-www-form-urlencoded";
stringpostData="Action=Load"+
"&sessionId="+session+
"&objectType="+objectType+
"&projectId="+projectId+
"&batchId="+batchId+
"&parentId="+parentId+
"&objectId="+objectId+
"&version="+version+
"&streamName="+streamName;
StreamWriterwriter=newStreamWriter(request.GetRequestStream());
writer.Write(postData);
writer.Close();
// 応答の受信
response=(HttpWebResponse)request.GetResponse();
responseStream=response.GetResponseStream();
reader=newBinaryReader(responseStream);
intresponseStreamLength=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();
returnresult;
}
ファイルをサーバーにアップロード
既存のファイルを開いてそこからデータを読み込む必要があります(「内容」文字列はEncoding.Defaultを使ってバイナリファイルから取得しなければなりません)。
ファイルを保存するには、サーバーリクエストを作成する必要があります(AppServerURL + "/FlexiCapture12/Server/FileService/v1")。リクエスト方法はPOSTでなければならず、コンテンツは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";
staticprivateCredentialCachebasicAuthenticationCredentialCache=null;
//「内容」文字列は、Encoding.Defaultを使用してバイナリファイルから取得しなければなりません
publicstaticList<byte>POSTSaveFile(stringAppServerURL,intsession,intprojectId,intbatchId,intobjectType,intobjectId,intversion,stringstreamName,stringcontent)
{
List<byte>result=newList<byte>();
HttpWebResponseresponse=null;
StreamresponseStream=null;
StreamReaderreader=null;
intrequestId=Environment.TickCount;
try
{
//リクエストの新規作成
HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(AppServerURL+"/FlexiCapture12/Server/FileService/v1");
request.Method="POST";
//ウェブサービスへの接続時の認証セットアップ
if(basicAuthenticationCredentialCache!=null)
{
request.Credentials=basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials=true;
}
request.ContentType="multipart/form-data, boundary="+requestId;
byte[]streamNameInBytes=Encoding.Unicode.GetBytes(streamName);
UnicodeEncodingUTFencofing=newUnicodeEncoding();
stringpostData="\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";
StreamWriterwriter=newStreamWriter(request.GetRequestStream(),Encoding.Default);
writer.Write(postData);
writer.Close();
// 応答の受信
response=(HttpWebResponse)request.GetResponse();
responseStream=response.GetResponseStream();
reader=newStreamReader(responseStream);
reader.Close();
responseStream.Close();
response.Close();
}
if(response!=null)response.Close();
if(responseStream!=null)responseStream.Close();
if(reader!=null)reader.Close();
returnresult;
}
チェックサムの取得
サーバーからファイルを読み込むには、サーバーリクエストを作成しなければなりません(AppServerURL + "/FlexiCapture12/Server/FileService/v1")。リクエスト方法はPOSTでなければならず、コンテンツはアプリケーション/x-www-form-urlencoded タイプのものでなければなりません。
リクエスト本体:
"Action=Checksum" + "&sessionId=" + session + "&objectType=" + objectType + "&projectId=" + projectId + "&batchId=" + batchId + "&objectId=" + objectId + "&version=" + version + "&streamName=" + streamName
staticprivate CredentialCache basicAuthenticationCredentialCache = null;
publicstatic 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";
// ウェブサービスへの接続時の認証セットアップ
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"+
сontent+ //この文字列は前の例と同じ方法で取得しなければなりません
"\r\n--"+requestId+"\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n"+offset+ //エントリを開始するファイルの先頭からのオフセット
"\r\n--"+requestId+"--\r\n";
staticprivateCredentialCachebasicAuthenticationCredentialCache=null;
// 「内容」文字列は、Encoding.Defaultを使用してバイナリファイルから取得しなければなりません
// 注:すでに存在しているファイルにかぎり追加できます。つまり、POSTSaveFileメソッドを使用してまずファイルを新規作成しなければなりません
publicstaticList<byte>POSTAppendFile(stringAppServerURL,intsession,intprojectId,intbatchId,intobjectType,intobjectId,intversion,stringstreamName,stringcontent,intoffset)
{
List<byte>result=newList<byte>();
HttpWebResponseresponse=null;
StreamresponseStream=null;
StreamReaderreader=null;
intrequestId=Environment.TickCount;
try
{
//リクエストを作成
HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(AppServerURL+"/FlexiCapture12/Server/FileService/v1");
request.Method="POST";
// ウェブサービスへの接続時の認証セットアップ
if(basicAuthenticationCredentialCache!=null)
{
request.Credentials=basicAuthenticationCredentialCache;
}
else
{
request.UseDefaultCredentials=true;
}
request.ContentType="multipart/form-data, boundary="+requestId;
byte[]streamNameInBytes=Encoding.Unicode.GetBytes(streamName);
UnicodeEncodingUTFencofing=newUnicodeEncoding();
stringpostData="\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";
StreamWriterwriter=newStreamWriter(request.GetRequestStream(),Encoding.Default);
writer.Write(postData);
writer.Close();
// 応答の受信
response=(HttpWebResponse)request.GetResponse();
responseStream=response.GetResponseStream();
//応答の表示
reader=newStreamReader(responseStream);
reader.Close();
responseStream.Close();
response.Close();
}
if(response!=null)response.Close();
if(responseStream!=null)responseStream.Close();
if(reader!=null)reader.Close();
returnresult;
}
12.04.2024 18:16:06