좋아, 필자는 이것으로 조금 더 알아 보았다. 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 호출은 오류를 반환하지 않으며 올바른 이름의 파일이 올바른 위치에 만들어 지지만 크기는 0입니다! InputStream.Size는 루틴에 전달 된 스트림 매개 변수와 동일한 값, 즉 원본 파일의 크기를가집니다.
아이디어가 있으십니까?
POSTSCRIPT. 문제를 찾았습니다. 시냇물로 몇 번 잡았어. 이거. 스트림에 데이터를 쓰는 경우 스트림에서 다시 읽으려고 시도하기 전에 스트림 위치를 다시 0으로 재설정하는 것을 잊지 마십시오. 나는.바로 줄 앞에 :
XMLHttp.send (InputStream) ;
내가 추가 할 필요 : 관심과 제안을
InputStream.Position = 0 ;
내 감사합니다.
Request.BinaryRead() 메소드를 살펴보십시오. –