[英]How to store a downloaded file object from S3 to a local directory
我正在嘗試使用適用於Java的AWS開發工具包從S3下載文件,並將特定文件存儲在PC的本地目錄中。
我為下載對象編寫的代碼是:
public void download(String key) {
S3Object obj=s3Client.getObject(new GetObjectRequest(bucketname,key));
}
但是我實際上想要做的是傳遞本地路徑作為參數而不是密鑰,並將下載的文件obj存儲在我的Linux框中的特定目錄中,例如/ tmp / AWSStorage /。
您能建議一種方法嗎?
我用了:
s3Client.getObject(new GetObjectRequest(bucket,key),file);
工作正常。
有一個API可直接將文件下載到本地路徑
ObjectMetadata getObject(GetObjectRequest getObjectRequest,
File destinationFile)
使用Java> = 1.6,您可以直接將下載的文件復制到本地目錄,而不會出現文件損壞的問題。 檢查代碼:
S3Object fetchFile = s3.getObject(new GetObjectRequest(bucketName, fileName));
final BufferedInputStream i = new BufferedInputStream(fetchFile.getObjectContent());
InputStream objectData = fetchFile.getObjectContent();
Files.copy(objectData, new File("D:\\" + fileName).toPath()); //location to local path
objectData.close();
使用Java 1.6及更高版本,可以直接在Files.copy函數中指定路徑。
您可以使用obj.getDataInputStream()
來獲取文件。 然后使用org.apache.commons.io.IOUtils
copy
方法進行復制。
S3Object obj=s3Client.getObject(new GetObjectRequest(bucketname,key));
File file=new File("/tmp/AWSStorage/"+key);
// if the directory does not exist, create it
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
然后您可以使用以下任一方法。
try {
IOUtils.copy(obj.getDataInputStream(), new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
要么
BufferedReader reader=null;
BufferedWriter out=null;
String data = null;
try {
reader = new BufferedReader(new InputStreamReader(fileObj.getDataInputStream()));
out = new BufferedWriter (new FileWriter(file));
while ((data = reader.readLine()) != null) {
out.write(data);
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
reader.close();
out.close();
}
在S3Object obj=s3Client.getObject(new GetObjectRequest(bucketname,key));
行中, S3Object obj=s3Client.getObject(new GetObjectRequest(bucketname,key));
bucketname是S3BucketName,Key是對象名稱,它不是本地文件路徑。 鍵-是通用前綴/對象名的組合
即,如果您將文件保存在存儲桶的根目錄下,則只有對象名稱才是密鑰,即myfile.txt,但是如果您的文件像myfolder1 / myfolder2 / myfile.txt這樣保存,則myfolder1 / myfolder是您的通用前綴和myfile。 txt是對象名。
S3Object obj=s3Client.getObject(new GetObjectRequest(bucketname,"myfolder1/myfolder2/myfile.txt"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.