ОК, у меня получилось немного дальше. Код в конце 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'ed из моего приложения, поэтому я считаю, что данные где-то там. Затем я вызываю подпрограмму (с потоком в качестве параметра), которая устанавливает аутентификацию / подпись AWS и выполняет PUT.
Вызов AWS не возвращает ошибок, и файл с правильным именем создается в нужном месте, но его размер равен нулю! InputStream.Size имеет значение, совпадающее с параметром потока, переданным подпрограмме, т.е. размером исходного файла.
Есть идеи?
Постскриптум. Нашел проблему. Это поймало меня несколько раз с потоками, этот. Когда вы записываете данные в поток, не забудьте сбросить позицию потока обратно в ноль, прежде чем пытаться снова читать из потока. То есть прямо перед строкой:
XMLHttp.send (InputStream) ;
Мне нужно было добавить:
InputStream.Position = 0 ;
Спасибо за интерес и предложения.