Tag: amazon s3

如何将S3对象写入文件?

将S3对象(我有密钥)写入文件的最快方法是什么? 我正在使用Java。

使用进度回调将文件或InputStream上载到S3

我们正在使用Amazon AWS Java Library上传文件,但很难获得上传进度。 我们目前正在调用以下内容: File file = new File(localAsset.getVideoFilePath()); PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, localAsset.getFileName(), file); s3.putObject(putObjectRequest); 我们如何设置回调来检查文件上传进度? 谢谢

由于授权,无法访问S3预签名URL

使用Java8和aws-java-sdk 1.10.43我正在尝试获取一个S3文件的预签名URL。 我确实找回了一个链接,但浏览到它会导致此错误: 您提供的授权机制不受支持。 请使用AWS4-HMAC-SHA256 为了强调,我希望生成一个可以通过电子邮件发送并在浏览器中打开的URL,而不是使用Java代码从该URL读取。 我正在使用波纹管代码,我相信我发现我需要以某种方式设置setSSEAlgorithm来使用“v4”,但是我没能使它工作。 我错过了什么? 我应该配置什么(注意:我故意避免配置文件,我希望代码从环境变量设置所有属性) Date expiration = ; GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, targetPath); generatePresignedUrlRequest.setMethod(HttpMethod.GET); generatePresignedUrlRequest.setExpiration(expiration); AmazonS3 s3client = new AmazonS3Client(s3Credentials); URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest); 水桶位于欧洲中心1号 谢谢

S3:如果由其他用户创建,则用户无法访问自己的s3存储桶中的对象

外部用户可以使用我们的存储桶策略中的以下操作访问我们的s3存储桶: “Action”: [ “s3:GetObjectAcl”, “s3:GetObject”, “s3:PutObjectAcl”, “s3:ListMultipartUploadParts”, “s3:PutObject” ] 该用户生成了临时凭证 ,然后用于将文件上传到我们的存储桶中。 现在,我无法访问该文件。 在s3用户界面中,如果我尝试下载文件,我会得到403.如果我尝试更改该对象的权限,我会看到消息:“抱歉!您无权查看该存储桶。” 如果外部用户在使用临时凭证上载文件时设置了相应的标头(x-amz-acl bucket-owner-full-control),我可以正常访问该文件。 我觉得很奇怪,即使我拥有该存储桶,外部用户也可以将文件放入我无法访问的文件中。 是否有可能我可以设置一些策略以便我可以访问该文件,或者我可以访问添加到我的存储桶的任何文件,无论它是如何添加的? 谢谢!

我可以更新现有的Amazon S3对象吗?

我在看Amazon S3样品,样品在那里进行插入/删除…… 但我想用新数据更新现有的blob。 基本上内容是文本文件,并且文本已被修改,我希望S3对象存储新的文本内容。 我如何用Java做到这一点?

如何从Java中的MIME类型确定适当的文件扩展名

我正在将文件上传到Amazon s3存储桶,并且可以访问InputStream和包含文件的MIME类型但不包含原始文件名的String。 在将文件推送到S3之前,实际创建文件名和扩展名取决于我。 是否有库或方便的方法来确定要使用的MIME类型的适当扩展名? 我已经看到一些对Apache Tika库的引用,但这看起来有点过分,我还没有能够成功检测到文件扩展名。 从我能够收集到的内容看起来这个代码应该可以工作,但是当我的类型变量是“image / jpeg”时,我只是得到一个空字符串 MimeType mimeType = null; try { mimeType = new MimeTypes().forName(type); } catch (MimeTypeException e) { Logger.error(“Couldn’t Detect Mime Type for type: ” + type, e); } if (mimeType != null) { String extension = mimeType.getExtension(); //do something with the extension }

与csv文件相比,将mysql表转换为spark数据集的速度非常慢

我在amazon s3中有csv文件,大小为62mb(114000行)。 我正在将其转换为spark数据集,并从中获取前500行。 代码如下; DataFrameReader df = new DataFrameReader(spark).format(“csv”).option(“header”, true); Dataset set=df.load(“s3n://”+this.accessId.replace(“\””, “”)+”:”+this.accessToken.replace(“\””, “”)+”@”+this.bucketName.replace(“\””, “”)+”/”+this.filePath.replace(“\””, “”)+””); set.take(500) 整个操作需要20到30秒。 现在我尝试相同但是使用csv我正在使用带有119 000行的mySQL表。 MySQL服务器在亚马逊ec2中。 代码如下; String url =”jdbc:mysql://”+this.hostName+”:3306/”+this.dataBaseName+”?user=”+this.userName+”&password=”+this.password; SparkSession spark=StartSpark.getSparkSession(); SQLContext sc = spark.sqlContext(); DataFrameReader df = new DataFrameReader(spark).format(“csv”).option(“header”, true); Dataset set = sc .read() .option(“url”, url) .option(“dbtable”, this.tableName) .option(“driver”,”com.mysql.jdbc.Driver”) .format(“jdbc”) .load(); set.take(500); 这需要5到10分钟。 我在jvm里面运行火花。 在两种情况下使用相同的配置。 我可以使用partitionColumn,numParttition等但我没有任何数字列,还有一个问题是我不知道该表的模式。 我的问题不是如何减少所需的时间,因为我知道在理想情况下火花将在集群中运行但我无法理解的是为什么在上述两种情况下这个大的时间差异?