簡體   English   中英

如何將從S3下載的文件對象存儲到本地目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM