好的,我对此有更进一步的了解。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,将其写入二进制流。如果我写出流的大小,我会从我的应用程序中获得我发布的文件的大小,所以我认为数据在某处。然后我调用一个例程(以流作为参数)设置 AWS 身份验证/签名并执行 PUT。
AWS 调用没有返回错误,并且在正确的位置创建了一个正确名称的文件,但它的大小为零!InputStream.Size 具有与传递给例程的流参数相同的值——即原始文件的大小。
有任何想法吗?
后记。发现了问题。有几次我被溪流抓住了,这个。当您将数据写入流时,不要忘记在再次尝试从流中读取之前将流位置重置为零。即就在行之前:
XMLHttp.send (InputStream) ;
我需要补充:
InputStream.Position = 0 ;
我感谢您的兴趣和建议。