直接写入Amazon S3

本文关键字:Amazon S3 | 更新日期: 2023-09-27 17:50:28

我正在阅读Amazon S3文档,但是我有点迷路了…

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

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

要创建这个html,请使用:

            TextWriter tw = new StreamWriter(pathFile);
            tw.WriteLine(page);
            tw.Close();

其中page是带有html代码的字符串,pathFile为:string outputWap = Server.MapPath("~/xxx.html");

我正在使用ASP。. NET MVC 2.

谢谢你的帮助。

问候。

直接写入Amazon S3

此时您不能在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;
            }
        }
    }

如果您正在使用。net的AWS SDK,您可以尝试使用PutObjectRequestInputStream集而不是FilePath,尽管我自己没有尝试过。

否则我真的看不出你现在的做法有什么问题。

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

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

问候,Ashok

我正在做这个:

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;
  }
}

注意:流参数i可以通过使用:

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