2011-10-26 2 views
1

별표 (dialplan) 응용 프로그램 내에서 MSSQL 데이터베이스에 사운드 파일을 삽입해야합니다. 저는 DB와 통신하기 위해 freeTDS를 사용하고 있습니다.freeTDS 별표 다이얼 플랜 내부에 BLOB 삽입

exten => s,n,Set(arch=${FILE(/var/lib/asterisk/sounds/custom/myFile.wav)}) 
exten => s,n,Verbose(${arch}) 
exten => s,n,Set(RESULT=${SHELL(echo -e use "AVL \\ngo\\ninsert into testblob (name, audiofile) values ('mar',${arch})\\ngo"|tsql -H x.x.x.x -p 1433 -U sa -P x)}) 

그러나 드 $ 안에 가장 확실하기 때문에 "특수 문자"의 작동하지 않는 {아치 :

예제 테이블은 "testblob"

(id int identity, name varchar(50), audiofile varbinary(MAX)) 
필자는이 코드를 시도

라고 } 변수. 나는 $ arch 내부 정보가 파일 정보라는 것을 알고 있지만 바이너리 나 64encode로 읽을 필요가 있다고 생각한다.

질문 :이 myFile.wav를 셸에서 직접 삽입 할 수있는 방법이 있습니까? 뭔가 같은 :

echo -e use "AVL \\ngo\\ninsert into testblob (name, audiofile) values ('mar',####MAGIC GOES HERE TO READ MYFILE.WAV###)\\ngo"|tsql -H x.x.x.x -p 1433 -U sa -P x 

답변

1

이 좋아, 그래서 한 줄에 그것을 할 수있는 방법은 다음과 같이 64 기수를 사용하고 있습니다 :

(echo -e -n use "AVL \\ngo\\nexec spAVL_SetAlertIVR 1, '";(base64 myFile.wav|tr -d '\n');echo -n -e "'\\ngo") | tsql -H 192.168.1.111 -p 1433 -U sa -P x 

노트의 사용 "()"와 "|" 그리고 "tr -d"를 사용하여 base64 명령에 의해 뒷받침 된 CR을 제거하는 트릭입니다.

희망이 도움이된다 다른 사람