2012-08-15 2 views
3

저는 안드로이드 장치에 다운로드 할 수있는 ASP.NET (C#)을 사용하여 vCard를 생성하려고 꽤 오랫동안 노력해 왔습니다.ASP.NET을 사용하여 안드로이드에서 다운로드 할 수있는 vCard를 생성하십시오.

카드를 생성하는 과정은 매우 간단하므로 걱정하지 않아도됩니다. 내가 다운로드 할 수없는 다운로드 자체입니다.

페이지 응답에 vCard를 부착 대한 나의 코드는 다음과 같습니다

public void downloadCard() 
{ 
    //generate the vCard text 
    string vCard = generateCard(); 

    //create the filename the user will download the file as 
    string filename = HttpUtility.UrlEncode(username + ".vcf", System.Text.Encoding.UTF8); 

    //get a reference to the response 
    HttpResponse response = HttpContext.Current.Response; 

    //clear the response and write our own one. 
    response.Clear(); 
    response.ContentType = "text/x-vcard"; 
    response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ";"); 
    response.Write(vCard); 
    response.End(); 
} 

페이지가 소요되는 유일한 매개 변수는 사용자 이름입니다하지만 난 그게 정말 중요하지으로 생성 과정을 보여주는 귀찮게하지 않습니다 이는 web.config 파일의 일부 URL 재 작성 덕분에 RESFUL URL을 통해 수신됩니다. 따라서 example.com/vcard/apbarratt URL은 apbarratt라는 사용자의 vCard를 생성합니다.

GET 요청이 코드를 생산하고 있다는 응답은 다음과 같습니다

200 OK 
Date: Wed, 15 Aug 2012 13:49:56 GMT 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Content-Disposition: attachment; filename=apbarratt.vcf; 
Content-Length: 199 
Server: Microsoft-IIS/7.5 
Content-Type: text/x-vcard; charset=utf-8 
Cache-Control: private 
BEGIN:VCARD 
VERSION:2.1 
N;LANGUAGE=en-us:Andy Barratt 
FN:Andy Barratt 
TEL;CELL;VOICE:07000000000 
URL;WORK:http://example.com 
EMAIL;INTERNET:[email protected] 
END:VCARD 

이 내가 (안 아이폰 OS에서 테스트 한 모든 단일 브라우저에서 완벽하게 작동, 즉에서 해결 된 또 다른 문제입니다 다른 방법), 안드로이드 주식 브라우저를 제외하고. 이러한 브라우저에서 파일 이름이 "알 수 없음"이고 용어가 "실패 함"이거나 사용자 이름이 "apbarratt.vcf"인 다른 장치에서 다운로드가 실패하고 변경되지 않는 "진행 중"이라는 용어가 실패합니다.

오페라 모바일/미니와 같은 다른 브라우저에서는 문제가 없습니다.

나는 그들이

... 어쨌든 ... 정말 무딘 나는 모든 일에 대한 꿈을 데 유사한 문제에 많은 블로그를 읽고, 생각할 수있는 가능한 모든 일을하고 시도했습니다 잘하면 신선한 눈이 나를 도울 수있을 것입니다. 어쩌면 누군가가 전에 이것을 해 놓았고 어떤 도움을 기대하면서 코드를 공유 할 수있었습니다.

앤디

+0

관련성이 있습니다. http://stackoverflow.com/questions/4381766/how-to-get-a-vcard-vcf-file-into-android-contacts-from-website. –

답변

0
당신이 그것을 해결 한 경우

이 몰라,하지만 당신은해야한다, 그래서 나는 N 개의 필드 5 개 값을 가질 것으로 예상 할 것 같다, 같은 문제와 장애물되었다 중 하나가 발생했습니다 따라서 (당신의 예제 중 4) 마지막에 추가 세미콜론을 삽입하거나 :

N;LANGUAGE=en-us:Barratt;Andy;;; 

또 다른 한가지는,/vCard를 텍스트 콘텐츠 유형을 설정하는 것이 좋습니다 것을, 즉 지금의 표준입니다.

0

Droid Safari 브라우저를 제외한 모든 제품이 똑같은 문제를 겪었습니다. 내 해결책은 파일을 텍스트로 읽은 다음 ASCII 바이트로 변환하는 것이 었습니다. 코드를 변경하면 Droids (2.3 및 3.2)가 행복해 보였습니다. 이 도움이

public ActionResult GetContact() 
{ 
    Response.Clear(); 
    Response.AddHeader("Content-disposition", string.Format("attachment; filename=\"{0}\";", "MyContact.vcf")); 

       // VERY IMPORTANT!!! 

       //  Read the file as text, and then convert it to ASCII bytes. 
       //  If ReadAllBytes is used, extra stray characters seem to appear and DROID fails. 

       //  Put the content type in the second parameter!!! 


    var vCardFile = System.IO.File.ReadAllText(Server.MapPath("~/Contacts/MyContact.vcf")); 
    return File(System.Text.Encoding.ASCII.GetBytes(vCardFile), "text/x-vcard"); 
} 

희망 ...

건배 : 여기

는 (내 MVC 기반 프로젝트에서) 코드 조각입니다.

관련 문제