寝て起きて寝て

プログラミングが出来ない情報系のブログ

AWSS3のバケット内にディレクトリ()を作成する

まずS3にはディレクトリという概念がないっぽい

なのでAWS側にLinuxでmkdirで作成したディレクトリを送ろうとするとAWSではディレクトリとして認識してくれない。

さらにAWSディレクトリ内にファイルが入っていない場合消える(っぽい?

以下のプログラムは入力された文字列のファイルを作成。
それを指定されたバケット内に同じ名前のディレクトリを作ってその中に同じ名前のtxtファイルをぶっこむプログラム
(多分動くはず

詳しい環境は後でおそらく次で書きます

S3で予めやっとくこと

testfileというバケットを作っておく


Linuxの方でやっておくこと

home直下にtestというディレクトリを作っておく事

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.PutObjectRequest;
 class File_test{

	public static void main(String[] args){

		String File_name = args[0];

		//S3内に引数のファイルがあるかどうかの確認
		boolean check = Check_S3(File_name);
		if(check){
			//無ければファイルを作成
			Cliate_File(File_name);

			Sent_S3(File_name);

		}
		else{
			//あればそのまま抜ける
			System.out.println("Dosen't need Sent File");

		}

	}



	public static boolean Check_S3(String file){
	//バケットの中に作ろうとしてるファイルがあるかどうかのチェック
		//型合わせ
		ArrayList<String> files = new ArrayList<String>();
		files.add(file+"/");

		//接頭辞の取得&それ以降の全文字列取得
		String prefixes = file.substring(0,1);
		String lang =file.substring(1)+"/";

		/*
         * Important: Be sure to fill in your AWS access credentials in the
         *            AwsCredentials.properties file before you try to run this
         *            sample.
         * http://aws.amazon.com/security-credentials
         */
    AmazonS3 s3 = null;
    	boolean flag = false;
    	try{
        s3 = new AmazonS3Client(new PropertiesCredentials(
                File_test.class.getResourceAsStream("AwsCredentials.properties")));
    	}catch(Exception e){
    		System.out.println("error");
    	}
    	String bucketName = "testfile";

//http://www.ne.jp/asahi/hishidama/home/tech/aws/s3/api.html#h_ListObjectsRequest参考
//バケット直下のフォルダを参照
    	ListObjectsRequest request = new ListObjectsRequest(bucketName, prefixes, null, lang, null);
    	ObjectListing list = s3.listObjects(request);
    	do {
    		List<String> folders = list.getCommonPrefixes();
//    		System.out.println(folders);
    		list = s3.listNextBatchOfObjects(list);
    		if (folders.equals(files)) {
    			flag = false;
    		}
    		else {
    			flag = true;
    		}
    	} while (list.getMarker() != null);

    	System.out.println(flag);
    	if(flag){
    		System.out.println("バケット内に無いからつくるね");
    	}else {

    		System.out.println("バケット内にあるから作らないよ");
		}
//    	System.out.println(files);
	return flag;
	}

	public static boolean Cliate_File(String file){
		///home/test内に引数のディレクトリを作成

		//File newfile = new File("/home/test/"+file);
		File newfile = new File("/home/test/"+file+".txt");
		boolean flag = newfile.mkdir();
		if(flag){
			System.out.println("Cleate_success");
		}
		else{
			System.out.print("Cleate_failure");
		}
		return flag;
	}

	public static void  Sent_S3(String file){

		 AmazonS3 s3 = null;
	    	try{
	        s3 = new AmazonS3Client(new PropertiesCredentials(
	                File_test.class.getResourceAsStream("AwsCredentials.properties")));
	    	}catch(Exception e){
	    		System.out.println("error");
	    	}
	    	String bucketName = "testfile";
	    	String filePath = "/home/test/";

	    	//PutObjectRequest putObj=new PutObjectRequest(bucketName,file+"/",filePath+file);
	    	PutObjectRequest putObj=new PutObjectRequest(bucketName,file+"/"+file+".txt",filePath);
            s3.putObject(putObj);
            //こっちのフォルダを削除
            File dfile = new File("/home/test/"+file+"txt");
    		boolean flag = dfile.delete();
    		if(flag){
                System.out.println("Sent_success");
        }
        else{
                System.out.print("Sent_failure");
        }
	}

}