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

Amazon s3 如何将字符串写入AmazonS3存储桶?,amazon-s3,amazon-web-services,Amazon S3,Amazon Web Services,如何在AmazonS3上添加字符串作为文件?从我搜索的任何地方,我知道我们可以上传一个文件到s3。上传数据而不创建文件的最佳方式是什么 上传数据的最佳方式是什么 不创建文件 如果你的意思是不在S3上创建一个文件,那么,你真的不能这么做。在AmazonS3上,存储数据的唯一方法是作为文件或使用更准确的术语对象。一个对象可以包含1字节零字节到5 TB的数据,并存储在一个存储桶中。亚马逊的。(对于AWS上的其他数据存储选项,您可能需要阅读,例如关于。) 如果您的意思是不创建本地临时文件,那么答案取决于

如何在AmazonS3上添加字符串作为文件?从我搜索的任何地方,我知道我们可以上传一个文件到s3。上传数据而不创建文件的最佳方式是什么

上传数据的最佳方式是什么 不创建文件

如果你的意思是不在S3上创建一个文件,那么,你真的不能这么做。在AmazonS3上,存储数据的唯一方法是作为文件或使用更准确的术语对象。一个对象可以包含1字节零字节到5 TB的数据,并存储在一个存储桶中。亚马逊的。(对于AWS上的其他数据存储选项,您可能需要阅读,例如关于。)

如果您的意思是不创建本地临时文件,那么答案取决于您使用的库/工具。(正如RickMeasham建议的,请添加更多细节!)例如,使用s3cmd工具,您不能跳过创建临时文件,而使用JetS3t Java库直接上载字符串:


看起来不太好,但下面是如何使用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;
        }
    }

如果您正在使用java,请查看

这对我很有用:

public static PutObjectResult WriteString(String bucket, String key, String stringToWrite, AmazonS3Client s3Client) {
    ObjectMetadata meta = new ObjectMetadata();
    meta.setContentMD5(new String(com.amazonaws.util.Base64.encode(DigestUtils.md5(stringToWrite))));
    meta.setContentLength(stringToWrite.length());
    InputStream stream = new ByteArrayInputStream(stringToWrite.getBytes(StandardCharsets.UTF_8));
    return s3Client.putObject(bucket, key, stream, meta);
}
有一个接受bucket字符串、键字符串和文本内容字符串的。我没有在堆栈溢出中看到它,所以我把它放在这里。这将类似于@Jonik的答案,但没有额外的依赖性

AmazonS3 s3client = AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
s3client.putObject(bucket, key, contents);

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

$s3->putObject(array(
        'Bucket'       => [Bucket name],
        'Key'          => [path/to/file.ext],
        'Body'         => [Your string goes here],
        'ContentType'  => [specify mimetype if you want],
    ));
这将根据指定的密钥创建一个新文件,该密钥具有字符串中指定的内容。

的示例代码适用于我

s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object");
看起来这是在1.11.20左右添加的,所以请确保您正在使用该版本或新版本的SDK


如果您的问题更详细,我建议您获得更多帮助。比如你用什么语言写,用什么库(如果有的话)与S3交互。这能回答你的问题吗?S3中的对象大小也可以是零字节,而不是您建议的最小字节。:)如何使用Amazons API实现这一点,S3Object的三个版本没有这样的构造函数
String text=“Hello”
s3client.putObject(bucket,fileNameWithOutExt+“.txt”,text)没有S3Object的构造函数,它接受2个字符串参数1.11.20或更高版本,并具有上面提到的重载方法@FakabbirAmin。请参见第页的示例
$s3->putObject(array(
        'Bucket'       => [Bucket name],
        'Key'          => [path/to/file.ext],
        'Body'         => [Your string goes here],
        'ContentType'  => [specify mimetype if you want],
    ));
s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object");