반응형

회사 서버에 스토리지가 매우 부족해서 어쩔 수 없이 이용자가 생성해내는 컨텐츠 파일 데이터를 CDN을 이용해 서비스하게 되었다.

더보기

FTP로 업로드를 해줘도 구글의 정책인 mixed content 불허 정책 때문에 크롬브라우저에선 net::ERR_CERT_AUTHORITY_INVALID가 떡 하고 떠버리니 뭔 짓을 해도 크롬(안드로이드 크롬 포함)에선 배짱이다.

mixed content란 그냥 내 서버가 아닌 다른 곳에 위치한 컨텐츠는 쓰지마라고 보면 된다. -_-

단! 서로 SSL을 지원할 경우 허용은 해주지만 CDN 서비스를 쓰면 SSL을 지원하는 CDN 찾기가 어렵다.

KT같은 대기업 CDN서비스도 마찬가지다. 
상담원에게 SSL이야기해도 못알아듣는다.
(세상 변화하는데 좀 따라가자 좀. IT 대기업이면서!)

따라서 FTP로 고생해가며 업로드를 해줘도 크롬에선 웹페이지로 보여주긴 글렀다 보면 되고 그냥 다이렉트 링크를 줘서 사용자더러 알아서 보게끔 하게 되었다.

 

여하간에 이런 상황이므로 dextupload 컴포넌트를 이용해 업로드 된 파일을 마찬가지로 FTP 컴포넌트를 이용하여 전송해주면 되겠다.

여기서 문제가 발생한다. 요즘 서버들은 다 64bit다.
하.. 딥빡
node.js로 ftp전송프로그램을 만들까도 생각했지만 전산팀에서 싫다한다. ㅎㅎㅎㅎㅎㅎㅎ

다시 돌아와서 FTP 컴포넌트를 만지작 거려본다.
그런데 classic asp는 너~무 오래된 단종된 언어인지라 ftp dll 컴포넌트가 32bit 밖에 존재하지 않는다.
물론 유료 $80짜리 상용 64bit 컴포넌트도 있긴 하지만
공짜가 좋지 아니하겠는가?

해결방법은 존재한다.
일단 classic asp에서 FTP업로드가 가능한 aspftp.dll을 구해본다.(친절하게도 나님이 첨부파일로 등록해뒀다.)

aspftp.zip
0.02MB

 

먼저 첫번재 방법이다.

서버로 이동해보자.

aspftp.dll 마우스 오른쪽 버튼 속성 > 보안 > 편집 > Users > 모든권한에 체크

cmd.exe를 실행 후 aspftp.dll이 존재하는 폴더에서(내 경우 wow64에 복사해뒀음) regsvr32 aspftp.dll

윈도우의 구성요소서비스 실행

콘솔루트 > 구성요소서비스 > 컴퓨터 > 내컴퓨터 > com+ 응용프로그램에서 마우스 오른쪽 클릭하여 새로만들기 > 응용프로그램 선택

응용프로그램 설치 마법사가 나오면 다음 클릭

빈 응용 프로그램 만들기 클릭

응용 프로그램의 이름을 입력(내 경우  ASPFTP)

계속 다음 클릭

새로 생성한 ASPFTP에서 마우스 오른쪽 클릭 후 속성 클릭

보안탭에 권한 부여 > 이 응용 프로그램에 대한 엑세스 검사 수행의 체크를 해제 > 확인 클릭하여 빠져 나오기

ASPFTP > 구성요소를 마우스 오른쪽 버튼으로 클릭하여 새로만들기 > 구성요소 클릭 > 다음 > 새 구성요소 설치 클릭하여 앞서 regsvr32로 등록했던 dll파일을 찾아 선택 후 다음 클릭

이제 코딩하면 된다.
코딩은 포스팅 하단에 만들어 두겠다.

 

64bit 윈도우에서 32bit dll사용하는 두번째 방법이다.

iis에서 그냥 쉽게 32bit True로 바꿔주면 된다.
응용프로그램 풀을 선택후 우클릭 혹은 우측의 고급설정을 클릭합니다.
"32비트 응용프로그램 사용"

그런데 이렇게 하면 다른 64bit dll들을 사용 못한다. -_-

그러도 된다면 간단하게 두번째 방법으로 진행하면 되고 그게 아니라면 첫번째 방법대로 진행하면 된다.

 

 

 

 

<%

ACCESS_TYPE_PRECONFIG = 0

ACCESS_TYPE_DIRECT = 1

ACCESS_TYPE_PROXY = 2

  

TRANSFER_TYPE_ASCII = 1

TRANSFER_TYPE_BINARY = 2

  

FILE_ACCESS_WRITE = 1

FILE_ACCESS_READ = 2

  

ATTRIBUTE_READONLY = 1

ATTRIBUTE_HIDDEN = 2

ATTRIBUTE_SYSTEM = 4

ATTRIBUTE_DIRECTORY = 16

ATTRIBUTE_ARCHIVE = 32

ATTRIBUTE_NORMAL = 128

ATTRIBUTE_TEMPORARY = 256

ATTRIBUTE_COMPRESSED = 2048

ATTRIBUTE_OFFLINE = 4096

 

  

Function ftpDownload(sourceFile, copyFile) ' Download Function

    Dim objFTP

    Dim strMsg

  

    Set objFTP = Server.CreateObject("NIBLACK.ASPFTP")

  

    objFTP.sServerName = "server"

    objFTP.sUserID = "id"

    objFTP.sPassword = "password"

  

    If objFTP.bConnect Then

        objFTP.lTransferType = TRANSFER_TYPE_ASCII

  

        If objFTP.bGetFile(copyFile, sourceFile) Then ' Success

            strMsg = "Get Successful!"

        Else

            strMsg = "Get Failed: " & objFTP.sError ' Fail

        End If

    Else

        strMsg = "Connection Failed: " & objFTP.sError

    End If

  

    Set objFTP = Nothing

  

    ftpDownload = strMsg

End Function

  

  

  

Function ftpUpload(sourceFile, copyFile) ' Upload Function

    Dim objFTP

 

    Dim strMsg

  

    Set objFTP = Server.CreateObject("NIBLACK.ASPFTP")

  

    objFTP.sServerName = "******"

    objFTP.sUserID = "******"

    objFTP.sPassword = "******"

    objFTP.bPassiveMode = True 'True 'Passive Mode

 

    If objFTP.bConnect Then

        objFTP.lTransferType = TRANSFER_TYPE_ASCII

  

        If objFTP.bPutFile(sourceFile, copyFile) Then ' Success

            strMsg = "Put Successful!"

        Else

            strMsg = "Put Failed: " & objFTP.sError ' Fail

        End If

    Else

        strMsg = "Connection Failed: " & objFTP.sError

    End If

  

    Set objFTP = Nothing

 

    ftpUpload = strMsg

End Function

 

' FTP FILE UPLOAD

ftpUploadResult = ftpUpload("D:\PDS\1.jpg","/test/1.jpg")

response.Write ftpUploadResult

  

' FTP FILE DOWNLOAD

'ftpDownloadResult = ftpDownload("Folder\uploadFile.txt","C:\uploadfile.txt")

%>

참고로 com+ 등록 원본은 아래와 같다.
blog.daum.net/kibchj/207

 

IIS7 64bit 에서 32bit dll 사용하기

1. 파일명.dll -> 속성 -> 보안 -> 편집 -> Users -> 모든권한에 체크   2. 시작 -> 실행 -> cmd 입력하여 dll 파일을 레지스트리에 등록시켜준다.    C:\regsvr32 C:\asp\파일명.dll 3. 구성요소서비스에 파일..

blog.daum.net

 

반응형
Posted by Hippalus
,