Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 直接写入AmazonS3_C#_Asp.net Mvc_Amazon S3 - Fatal编程技术网

C# 直接写入AmazonS3

C# 直接写入AmazonS3,c#,asp.net-mvc,amazon-s3,C#,Asp.net Mvc,Amazon S3,我正在阅读AmazonS3文档,但我有点迷路了 实际上,用户将一个文件上传到AmazonS3,然后,我将它复制到EC2,处理它,返回到S3,用户可以下载它 当我处理这个文件时,我需要创建一个html文件,我需要在AmazonS3中创建,但是我不知道如何直接在S3上创建这个文件。现在,我在EC2上创建了一个文件,然后将其移动到S3 要创建此html,请使用: TextWriter tw = new StreamWriter(pathFile); tw

我正在阅读AmazonS3文档,但我有点迷路了

实际上,用户将一个文件上传到AmazonS3,然后,我将它复制到EC2,处理它,返回到S3,用户可以下载它

当我处理这个文件时,我需要创建一个html文件,我需要在AmazonS3中创建,但是我不知道如何直接在S3上创建这个文件。现在,我在EC2上创建了一个文件,然后将其移动到S3

要创建此html,请使用:

            TextWriter tw = new StreamWriter(pathFile);
            tw.WriteLine(page);
            tw.Close();
其中页面是一个带有html代码的字符串,路径文件是:
string outputWap=Server.MapPath(“~/xxx.html”)

我正在使用ASP.NETMVC2

谢谢你的帮助


关于。

如果您使用的是AWS SDK for.Net,您可以尝试使用
InputStream
集,而不是
文件路径
,尽管我自己没有尝试过


否则,我真的看不出你目前的做法有什么问题。

请阅读以下文章,我认为它们是相关的:

http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html

关于这一点,Ashok

此时您不能在s3中创建(不要与上传相混淆,上传当然是完全可行的)文件(至少使用.net SDK)。如果您无法控制本地文件系统(空间限制、权限或其他),则可以在内存中创建一个文件,然后将该流上载到s3,就像它是本地存储在磁盘上的文件一样。c#的代码如下:

public static bool CreateFile()
    {
        // Create file in memory
        UnicodeEncoding uniEncoding = new UnicodeEncoding();

        // Create the data to write to the stream.
        byte[] memstring = uniEncoding.GetBytes("you're file content here");
        using (MemoryStream memStream = new MemoryStream(100))
        {
            memStream.Write(memstring, 0, memstring.Length);

            // upload to s3
            try
            {
                AmazonS3Client s3 = new AmazonS3Client(RegionEndpoint.USEast1);
                using (Amazon.S3.Transfer.TransferUtility tranUtility =
                              new Amazon.S3.Transfer.TransferUtility(s3))
                {
                    tranUtility.Upload(memStream, bucketname, keyname);

                    return true;
                }
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }
我正在这样做:

public bool Upload(string filePath, Stream inputStream, double contentLength, string contentType)
{
  try
  {
      var request = new PutObjectRequest();
      string _bucketName = "";

      request.BucketName = _bucketName;
      request.CannedACL = S3CannedACL.PublicRead;
      request.InputStream = inputStream;
      request.Key = filePath;
      request.Headers.ContentType = contentType;

      PutObjectResponse response = _amazonS3Client.PutObject(request);

      return true;

  }catch(Exception ex)
  {
      return false;
  }
}
注意:我可以通过以下方式传递流参数:

HttpPostedFileBase file = this.Request.Files[0];
file.Stream;

谢谢你的回答杰夫,我要试试,我会留下反馈的。我很高兴知道这样是不对的。PD:我忘了,是的,我正在使用AWS SDK for.NET:)最后我在EC2上编写html文件并将其复制到S3。与其他文件的方式相同。谢谢你的帮助:)