2013-04-25 3 views
0

장시간 숨어있는 첫 번째 포스터입니다. 몇 년 동안 .Net/Linq로 작업 했으므로 여기서 뭔가를 놓치고 있다고 확신합니다. 수많은 시간 동안 연구 끝에 도움이 필요합니다. https : http://damieng.com/blog/2010/01/11/linq-to-sql-tips-and-tricks-3FileWriteAllBytes 대신 파일 저장 프롬프트

다음 코드는 현재 SQL 데이터베이스에 저장된 선택한 파일 (C : \ temp)을 저장합니다. 훌륭하게 작동합니다. 나는 한 걸음 더 나아가고 싶다. 자동으로 c : \ temp에 저장하는 대신 원하는 위치에 저장할 수 있도록 브라우저 프롬프트를 표시 할 수 있습니다.

{  
    var getFile = new myDataClass(); 

    //retrieve attachment id from selected row 
    int attachmentId = Convert.ToInt32((this.gvAttachments.SelectedRow.Cells[1].Text)); 

    //retrieve attachment information from dataclass (sql attachment table) 
    var results = from file in getFile.AttachmentsContents 
         where file.Attachment_Id == attachmentId 
         select file; 

    string writePath = @"c:\temp"; 

    var myFile = results.First(); 

    File.WriteAllBytes(Path.Combine(writePath, myFile.attach_Name), myFile.attach_Data.ToArray()); 
} 

그래서 대신 내가 대신 내 LINQ 쿼리 (의 myFile)에서 반환 된 데이터를 가지고 사용자가 대신에 파일을 저장을 묻는 메시지 무언가에 전달할 수 File.WriteAllBytes를 사용하고 계십니까?

). 이 반환 된 객체를 response.transmitfile과 함께 사용할 수 있습니까? 정말 고마워.

답변

0

이미 메모리에 저장되어 있으므로 BinaryWrite(myFile.attach_Data.ToArray()) 메서드를 사용하면 데이터를 보낼 수 있습니다. 예를 들어 적절하게

하지만 먼저 설정 헤더 :

"Content-Disposition", "attachment; filename="+myFile.attach_Name 
"Content-Type", "application/vnd.openxmlformats-officedocument.wordprocessingml.document" 

콘텐츠 형식은 파일을 처리하는 방법에 수신 시스템을 안내합니다. 여기에 MS Office content types이 더 있습니다. 데이터가 저장되는 지점에 알려지면 내용 유형도 저장해야합니다.

또한 파일 내용이 응답에서 원하는 유일한 데이터이기 때문에 BinaryWrite 다음에 End 앞에 Clear을 호출하십시오.

+0

완벽하게 작동했습니다. 정말 고마워! – DysonGuy

+0

나는 총을 뛰어 넘었다! 다운로드 한 파일을 열면 손상되었습니다. 나는 docx와 doc 모두 시도했다. 테스트 목적으로 File.WriteAllBytes 코드를 제 위치에 두었고 c : \ temp의 문서를 열면 잘 열립니다. 그래서 나는 여전히 뭔가를 놓치고있다. Response.Write (myFile.attach_Data.ToArray()); – DysonGuy

+0

해결책을 찾기 위해 Response.BriteWrite를 Response.BinaryWrite로 변경했습니다. doc 파일과 pdf 파일은 이제는 docx가 잘 돌아 가지 않아도 괜찮습니다. – DysonGuy