Server/AWS , Cloud

네이버 클라우드(NCP) Object Storage 파일 업로드

즐겁게 하하하 2022. 9. 20. 10:01
728x90

Object Storage 와 AWS S3 을 이용하여  MOUNT 하는 작업이 선행 되어야 한다.
 

aws 의 s3 을 이용하여  Object Storage 를 연동해야 한다/

--------------------
   Access Key ID    :  
   Secret Key        :  

  Ncloud API URL (default:https://ncloud.apigw.ntruss.com)

 정적 웹 사이트 엔드포인트( 네이버 클라우드 버킷 정보에 있음 )
http://test-bucket1.s3-website.kr.object.ncloudstorage.com
--------------------

============================================================
[ Linux CentOS 7에 파이썬 pip3 설치하기 ] - https://earthconquest.tistory.com/224

yum update
[root@localhost ~]# yum install epel-release	//pip를 설치하려면 epel저장소를 활성화 시켜야한다.

[root@localhost ~]# yum install python3-pip 	//pip3 설치

[root@localhost ~]# rpm -qa | grep -i python3-pip
python3-pip-9.0.3-7.el7_7.noarch

[root@localhost ~]# pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)


[Object Storage CLI] https://cli.ncloud-docs.com/docs/guide-objectstorage
#aws cli설치
pip3 install awscli==1.15.85

#Metadata API timeout을 늘려주기
export AWS_METADATA_SERVICE_TIMEOUT=10

# aws 보안 설정
aws configure

# 버킷 목록을 조회
aws --endpoint-url=http://kr.object.ncloudstorage.com s3 ls
aws --endpoint-url=http://kr.object.ncloudstorage.com s3api list-buckets

============================================================


============================================================
[마운트 s3 버캣] Fuse를 이용하여 Object Storage 쉽게 사용하기
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=n_cloudplatform&logNo=221533132870

# S3FS-Fuse 설치
yum install automake fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel

git clone https://github.com/s3fs-fuse/s3fs-fuse.git

cd s3fs-fuse

./autogen.sh

./configure

make

make install


echo q2f0E5ziHDA4ZeUxVHUW:g9G2xOb1O9jWoGxZk9PwUmV5NBnjEFKw2LH1aF2Z > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs

#마운트할 디렉토리 생성
mkdir /test-objstorage

# 'test-bucket'버캣명으로 마운트함
s3fs test-bucket /TEST-objstorage -o url=https://kr.object.ncloudstorage.com
============================================================


============================================================
[Ncloud CLI 설정] - https://cli.ncloud-docs.com/docs/guide-userguide

./ncloud server getRegionList
============================================================

 
 
 
 
https://guide.ncloud-docs.com/docs/storage-storage-8-1

Java용 AWS SDK - Amazon S3 API 활용 예제

guide.ncloud-docs.com

 
context - common.xml

	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
			<property name="defaultEncoding" value="EUC-KR" />
			<property name="maxUploadSize" value="10000000" />
			<property name="maxInMemorySize" value="10485760" />
	</bean>

 
Controller
 

@RequestMapping(value = "/aa/bb/savecc.do", method = RequestMethod.POST)
@ResponseBody
public ModelAndView saveBcnc(
        @RequestParam HashMap<String ,Object> paramMap,
        @ModelAttribute("searchVO") SearchVO searchVO,
        ModelAndView mv, HttpServletRequest request) throws Exception {

		// ************************************************
		//  	Object Storage 직접 Upload 하는 기능 2022-09-20	
		// ************************************************
		MultipartHttpServletRequest req = (MultipartHttpServletRequest) request; 
		File file = null;
		Iterator<String> itr = req.getFileNames(); 
		while(itr.hasNext()) {
			MultipartFile mfile = req.getFile(itr.next()); 
			file = new File(mfile.getOriginalFilename());
			file.createNewFile();
			FileOutputStream fos = new FileOutputStream(file);
			fos.write(mfile.getBytes());
			fos.close();  
		}  
		System.out.println(">>>>>>>>>>>>> NCP Object Storage File upload !! =====> " + file.getName()); 
		boolean uploads = s3ObjectFile.ObjectFileUpload( "버킷명" , "testFolder" , file.getName() , file ); 
}

 
S3ObjectFile.java

import java.io.ByteArrayInputStream;
import java.io.File;

import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;

public class S3ObjectFile {
		
	public static boolean ObjectFileUpload( String bucketName , String folderName , String objectName , File file ) {
		 
	    final String endPoint = "https://kr.object.ncloudstorage.com";
	    final String regionName = "kr-standard";
	    final String accessKey = "작성하기";
	    final String secretKey = "작성하기";

	    // S3 client
	    final AmazonS3 s3 = AmazonS3ClientBuilder.standard()
	        .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, regionName))
	        .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
	        .build(); 
	    
	    // create folder
	    String newPath = folderName + "/";
	    ObjectMetadata objectMetadata = new ObjectMetadata();
	    objectMetadata.setContentLength(0L);
	    objectMetadata.setContentType("application/x-directory");
	    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, newPath , new ByteArrayInputStream(new byte[0]), objectMetadata);

	    try {
	        s3.putObject(putObjectRequest);
	        System.out.format(">>>>>>>>>>  Folder %s has been created.\n", folderName);
	    } catch (AmazonS3Exception e) {
	        e.printStackTrace();
	    } catch(SdkClientException e) {
	        e.printStackTrace();
	    }

	    // upload local file 
	    newPath = folderName + "/" + objectName;

	    try {
	        //s3.putObject(bucketName, objectName, new File(filePath));
	    	s3.putObject(bucketName, newPath, file);
	        System.out.format(">>>>>>>>>>  Object %s has been created.\n", objectName);
	    } catch (AmazonS3Exception e) {
	        e.printStackTrace();
	    } catch(SdkClientException e) {
	        e.printStackTrace();
	    }
	    
	    return true;
	} 
	
}
728x90