C# 无法使用nodejs生成的签名url上载到s3

C# 无法使用nodejs生成的签名url上载到s3,c#,node.js,file-upload,amazon-s3,C#,Node.js,File Upload,Amazon S3,我有一个nodejs应用程序,它正在生成一个签名url,用于将文件上载到AWS S3。我想使用这个签名的url将文件从C#winforms应用程序上传到S3 在我的C#代码中,当我使用从nodejs服务器获得的签名url将文件上载到S3时,我得到以下错误: The connection was forcibly closed by the remote host 但是如果我使用C#生成签名的url,文件就会成功上传。我尝试编码和解码我从nodejs得到的url,但没有成功。C#和nodejs服

我有一个nodejs应用程序,它正在生成一个签名url,用于将文件上载到AWS S3。我想使用这个签名的url将文件从C#winforms应用程序上传到S3

在我的C#代码中,当我使用从nodejs服务器获得的签名url将文件上载到S3时,我得到以下错误:

The connection was forcibly closed by the remote host
但是如果我使用C#生成签名的url,文件就会成功上传。我尝试编码和解码我从nodejs得到的url,但没有成功。C#和nodejs服务器都在我的本地主机中工作,所以应该没有时差

由c#(工作)和NodeJ(不工作)生成的url示例:

生成签名url的nodejs代码:

// this signed url does not work
var params = { Bucket: bucket, Key: folder + "/" + filename, Expires: 3600 };
s3.getSignedUrl('getObject', params, callback);
// this signed url works
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
{
    BucketName = "mybucket",
    Key = "folder/" + _id + ".flv",
    Verb = HttpVerb.PUT,
    Expires = DateTime.Now.AddMinutes(5)
};

string url = null;
url = s3Client.GetPreSignedURL(request);
生成签名url的c代码:

// this signed url does not work
var params = { Bucket: bucket, Key: folder + "/" + filename, Expires: 3600 };
s3.getSignedUrl('getObject', params, callback);
// this signed url works
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest
{
    BucketName = "mybucket",
    Key = "folder/" + _id + ".flv",
    Verb = HttpVerb.PUT,
    Expires = DateTime.Now.AddMinutes(5)
};

string url = null;
url = s3Client.GetPreSignedURL(request);
上传文件的C代码:

HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest;
httpRequest.Method = "PUT";
using (Stream dataStream = httpRequest.GetRequestStream())
{
    byte[] buffer = new byte[8000];
    using (FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
    {
        int bytesRead = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            dataStream.Write(buffer, 0, bytesRead);
        }
    }
}

HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;

为什么我的nodejs生成的url不起作用,而我的C#生成的url起作用?如何让我的nodejs生成的签名url正常工作?

我解决了这个问题。问题出现在nodejs代码的这一行:

s3.getSignedUrl('getObject', params, callback);
应该是哪一个

s3.getSignedUrl('putObject', params, callback);
相反