如何将字符串写入Amazon S3存储桶?

Sou*_*abh 26 amazon-s3 amazon-web-services

如何在亚马逊s3上添加字符串作为文件?从我搜索的whaterver,我知道我们可以上传文件到s3.在不创建文件的情况下上传数据的最佳方法是什么?

Pau*_*lor 11

看起来不是很好,但是你可以使用Amazons Java客户端来完成它,可能是JetS3t在幕后做的事情.

private boolean putArtistPage(AmazonS3 s3,String bucketName, String key, String webpage)
    {
        try
        {
            byte[]                  contentAsBytes = webpage.getBytes("UTF-8");
            ByteArrayInputStream    contentsAsStream      = new ByteArrayInputStream(contentAsBytes);
            ObjectMetadata          md = new ObjectMetadata();
            md.setContentLength(contentAsBytes.length);
            s3.putObject(new PutObjectRequest(bucketname, key, contentsAsStream, md));
            return true;
        }
        catch(AmazonServiceException e)
        {
            log.log(Level.SEVERE, e.getMessage(), e);
            return false;
        }
        catch(Exception ex)
        {
            log.log(Level.SEVERE, ex.getMessage(), ex);
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Rex*_*NFX 11

AmazonS3.putObject方法存在重载,该方法接受存储桶字符串,键字符串和一串文本内容.在堆栈溢出时我没有看到它的提及所以我把它放在这里.这将是类似@ Jonik的答案,但没有额外的依赖性.

AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);
Run Code Online (Sandbox Code Playgroud)


Jon*_*nik 6

在不创建文件的情况下上传数据的最佳方法是什么?

如果您的意思是不在S3上创建文件,那么您实际上就不能这样做。在Amazon S3上,存储数据的唯一方法是作为文件或使用更准确的术语object。对象可以包含1字节零字节到5 TB数据,并存储在bucket中。亚马逊的S3主页非常清楚地列出了基本事实。(对于AWS上的其他数据存储选项,您可能需要阅读例如有关SimpleDB的信息。)

如果您的意思是不创建本地临时文件,那么答案取决于您所使用的库/工具。(如RickMeasham所建议,请添加更多详细信息!)例如,使用s3cmd工具,您不能跳过创建临时文件,而使用JetS3t Java库直接上传String则很容易

// (First init s3Service and testBucket)
S3Object stringObject = new S3Object("HelloWorld.txt", "Hello World!");
s3Service.putObject(testBucket, stringObject);
Run Code Online (Sandbox Code Playgroud)

  • 如何使用Amazons API进行此操作,那里的S3Object版本没有这样的构造函数 (22认同)
  • S3中的对象大小也可以为零字节,而不是您建议的最小字节数。:) (2认同)
  • S3Object 没有带有 2 个字符串参数的构造函数 (2认同)

Ron*_*ony 6

有一种使用PHP的简单方法,只需将字符串作为对象的主体发送,并在键中指定新文件的名称-

$s3->putObject(array(
        'Bucket'       => [Bucket name],
        'Key'          => [path/to/file.ext],
        'Body'         => [Your string goes here],
        'ContentType'  => [specify mimetype if you want],
    ));
Run Code Online (Sandbox Code Playgroud)

这将根据指定的键创建一个新文件,该文件具有字符串中指定的内容。