[amazon-web-services] अमेज़ॅन एस 3 में फ़ाइलों और फ़ोल्डर का नाम कैसे बदलें?


Answers

मैंने अभी इसका परीक्षण किया और यह काम करता है:

aws s3 --recursive mv s3://<bucketname>/<folder_name_from> s3://<bucket>/<folder_name_to>
Question

अमेज़ॅन एस 3 में फ़ाइलों और फ़ोल्डरों का नाम बदलने के लिए कोई फ़ंक्शन है? किसी भी संबंधित सुझाव का भी स्वागत है।




आप या तो AWS S3 बाल्टी में फ़ाइलों और फ़ोल्डर्स का नाम बदलने के लिए AWS CLI या s3cmd कमांड का उपयोग कर सकते हैं।

S3cmd का उपयोग करके, किसी फ़ोल्डर का नाम बदलने के लिए निम्न वाक्यविन्यास का उपयोग करें,

s3cmd --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>

एडब्ल्यूएस सीएलआई का उपयोग करके, किसी फ़ोल्डर का नाम बदलने के लिए निम्न वाक्यविन्यास का उपयोग करें,

aws s3 --recursive mv s3://<s3_bucketname>/<old_foldername>/ s3://<s3_bucketname>/<new_folder_name>



नाज़ द्वारा उत्तर दिया गया है कि एस 3 का प्रत्यक्ष नामांकन संभव नहीं है।

मैंने एक कोड स्निपेट संलग्न किया है जो सभी सामग्री की प्रतिलिपि बनायेगा

कोड काम कर रहा है बस अपनी aws एक्सेस कुंजी और गुप्त कुंजी जोड़ें

यहां मैंने कोड में क्या किया है

-> स्रोत फ़ोल्डर सामग्री (नेस्टेड बच्चे और फ़ोल्डरों) की प्रतिलिपि बनाएँ और गंतव्य फ़ोल्डर में चिपकाया गया है

-> जब प्रतिलिपि पूरी हो जाती है, तो स्रोत फ़ोल्डर हटाएं

package com.bighalf.doc.amazon;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3ObjectSummary;

public class Test {

public static boolean renameAwsFolder(String bucketName,String keyName,String newName) {
    boolean result = false;
    try {
        AmazonS3 s3client = getAmazonS3ClientObject();
        List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries();
        //some meta data to create empty folders start
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentLength(0);
        InputStream emptyContent = new ByteArrayInputStream(new byte[0]);
        //some meta data to create empty folders end

        //final location is the locaiton where the child folder contents of the existing folder should go
        String finalLocation = keyName.substring(0,keyName.lastIndexOf('/')+1)+newName;
        for (S3ObjectSummary file : fileList) {
            String key = file.getKey();
            //updating child folder location with the newlocation
            String destinationKeyName = key.replace(keyName,finalLocation);
            if(key.charAt(key.length()-1)=='/'){
                //if name ends with suffix (/) means its a folders
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, destinationKeyName, emptyContent, metadata);
                s3client.putObject(putObjectRequest);
            }else{
                //if name doesnot ends with suffix (/) means its a file
                CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, 
                        file.getKey(), bucketName, destinationKeyName);
                s3client.copyObject(copyObjRequest);
            }
        }
        boolean isFodlerDeleted = deleteFolderFromAws(bucketName, keyName);
        return isFodlerDeleted;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

public static boolean deleteFolderFromAws(String bucketName, String keyName) {
    boolean result = false;
    try {
        AmazonS3 s3client = getAmazonS3ClientObject();
        //deleting folder children
        List<S3ObjectSummary> fileList = s3client.listObjects(bucketName, keyName).getObjectSummaries();
        for (S3ObjectSummary file : fileList) {
            s3client.deleteObject(bucketName, file.getKey());
        }
        //deleting actual passed folder
        s3client.deleteObject(bucketName, keyName);
        result = true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

public static void main(String[] args) {
    intializeAmazonObjects();
    boolean result = renameAwsFolder(bucketName, keyName, newName);
    System.out.println(result);
}

private static AWSCredentials credentials = null;
private static AmazonS3 amazonS3Client = null;
private static final String ACCESS_KEY = "";
private static final String SECRET_ACCESS_KEY = "";
private static final String bucketName = "";
private static final String keyName = "";
//renaming folder c to x from key name
private static final String newName = "";

public static void intializeAmazonObjects() {
    credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY);
    amazonS3Client = new AmazonS3Client(credentials);
}

public static AmazonS3 getAmazonS3ClientObject() {
    return amazonS3Client;
}

}







S3DirectoryInfo में एक MoveTo विधि है जो एक निर्देशिका को दूसरी निर्देशिका में ले जायेगी, जैसे कि स्थानांतरित निर्देशिका अन्य निर्देशिका की उपनिर्देशिका बन जाएगी जैसा मूल रूप से था।

नीचे दी गई विस्तार विधि एक निर्देशिका को दूसरी निर्देशिका में ले जायेगी, यानी स्थानांतरित निर्देशिका दूसरी निर्देशिका बन जाएगी। वास्तव में यह क्या करता है नई निर्देशिका बनाते हैं, पुरानी निर्देशिका की सभी सामग्री को इसमें ले जाते हैं, और फिर पुराने को हटा देते हैं।

public static class S3DirectoryInfoExtensions
{
    public static S3DirectoryInfo Move(this S3DirectoryInfo fromDir, S3DirectoryInfo toDir)
    {
        if (toDir.Exists)
            throw new ArgumentException("Destination for Rename operation already exists", "toDir");
        toDir.Create();
        foreach (var d in fromDir.EnumerateDirectories())
            d.MoveTo(toDir);
        foreach (var f in fromDir.EnumerateFiles())
            f.MoveTo(toDir);
        fromDir.Delete();
        return toDir;
    }
}



अब फाइलों के लिए यह संभव है, फ़ाइल का चयन करें और फिर चुनें> जीयूआई में नाम बदलें।

किसी फ़ोल्डर का नाम बदलने के लिए, आपको इसके बजाय एक नया फ़ोल्डर बनाना होगा, और पुराने की सामग्री का चयन करना होगा और इसे कॉपी / पेस्ट करना होगा (फिर से "अधिक" के अंतर्गत)




Related