OK、これでもう少し進んだ。ASP側のコードは次のとおりです。
var PostedDataSize = Request.TotalBytes ;
var PostedData = Request.BinaryRead (PostedDataSize) ;
var PostedDataStream = Server.CreateObject ("ADODB.Stream") ;
PostedDataStream.Open ;
PostedDataStream.Type = 1 ; // binary
PostedDataStream.Write (PostedData) ;
Response.Write ("PostedDataStream.Size = " + PostedDataStream.Size + "<br>") ;
var XML = AmazonAWSPUTRequest (BucketName, AWSDestinationFileID, PostedDataStream) ;
.....
function AmazonAWSPUTRequest (Bucket, Filename, InputStream)
{
....
XMLHttp.open ("PUT", URL + FRequest, false) ;
XMLHttp.setRequestHeader (....
XMLHttp.setRequestHeader (....
...
Response.Write ("InputStream.Size = " + InputStream.Size + "<br>") ;
XMLHttp.send (InputStream) ;
そこで、BinaryReadを使用して、バイナリストリームに書き込みます。ストリームのサイズを書き出すと、アプリケーションからPOSTしたファイルのサイズを取得するので、データはどこかにあると思います。次に、AWS認証/署名を設定してPUTを実行するルーチン(パラメーターとしてストリームを使用)を呼び出します。
AWS呼び出しはエラーを返さず、正しい名前のファイルが適切な場所に作成されますが、サイズはゼロです。InputStream.Sizeの値は、ルーチンに渡されるストリームパラメーターと同じです。つまり、元のファイルのサイズです。
何か案は?
追記。問題が見つかりました。これは、ストリームで何度か私を捕まえました。ストリームにデータを書き込むときは、ストリームからの読み取りを再試行する前に、ストリームの位置をゼロにリセットすることを忘れないでください。つまり、行の直前:
XMLHttp.send (InputStream) ;
追加する必要がありました:
InputStream.Position = 0 ;
関心と提案に感謝します。