2009-08-27 5 views
1

웹 응용 프로그램에서 파일을 전자 메일의 첨부 파일로 보내려고합니다. 그건 꽤 할 수 있습니다; 필자가해야 할 일은 파일 경로를 지정하는 것입니다. 그러나 파일을 보내기 전에 시스템에서 파일을 만들어야합니다. 렌더링 된 보고서입니다. 그것이 첨부 파일에 저장되므로 저장되는 곳이 중요하지 않습니다. 그렇다면이 파일을 작성하는 방법을 알 수 없습니다. 내 localhost에서 작동하지만 회사의 개발 서버에서 실행할 때는 작동하지 않습니다. 오류 메시지는 500입니다. 비난적이고 알려지지 않은.ASP.Net에서 파일 만들기

이것은 사용자가 그녀의 상사에게 이메일로 전송 얻을 것이다 보고서 생성하기 버튼을 클릭 할 때 증발하는 이벤트 처리기의 일부입니다 :이 코드에서

을, 내선 몇 가지 변수 세 가지 편지 파일 확장자 및 콘텐츠입니다 반환 값은 ReportExecutionService 객체에서 Render를 실행 한 결과 값입니다.

var rptPath = HttpContext.Current.Server.MapPath(string.Format("Report.{0}", ext)); 
//using (var fs = new FileStream(rptPath, FileMode.OpenOrCreate, FileAccess.Write)) 
using (var fs = File.Create(rptPath)) 
{ 
    fs.Write(content, 0, content.Length); 
} 

...이 시점에서 Exception을 발생시킵니다. 개발 서버의 파일 시스템을 마우스 오른쪽 단추로 클릭하고 해당 계정에 대한 사용 권한을 완화하여 NetworkService 계정에 쓰기 권한을 부여했습니다. 또한 개발 서버에서 웹 응용 프로그램을 호스트하는 IIS 6의 보안을 완화했습니다. 그 밖에 무엇이 필요합니까? 나는 단지 .pdf 파일을 루트 웹 디렉토리에 뿌리기를 원한다.

+0

정확한 예외를 신고 한 경우 더 유용합니다. –

+0

앱이 Ajax에 묻혀서 노란색 Javascript 오류 삼각형을 제외하고는 명확한 예외는 없었습니다.이 삼각형은 알려지지 않은 오류 500이 발생했다고 말했습니다. – JonathanWolfson

답변

0

폴더를 마우스 오른쪽 단추로 클릭하고 보안 권한에 ASPNET 계정에 대한 전체 액세스 권한을 부여 할 때 작동합니다. NetworkService 계정에이 권한을 부여하면 작동하지 않지만 ASPNET에 부여하면 작동하지 않습니다.

0

ASP 서버는 일반적으로 스크립트에서 쓸 수있는 폴더를 제한합니다. 일반적으로 ASP 응용 프로그램에는 쓰기 권한으로 구성된 전용 폴더가 있어야합니다. 선행 슬래시없이 MapPath()에 상대 파일 경로를 지정하기 때문에 호출하는 .asp 파일과 동일한 폴더에있는 전체 파일 경로가 반환됩니다.이 파일 경로는 스크립트 내에서 쓰기 가능하지 않을 수 있습니다.

1

System.IO.Path.GetTempFileName 방법을 사용해 볼 수 있습니다. "이렇게하면 디스크에 고유 한 이름의 0 바이트 임시 파일이 만들어지고 해당 파일의 전체 경로가 반환됩니다." 시스템 임시 디렉토리에 생성되므로 정리 등을 걱정할 필요가 없습니다.

+0

유용합니다. 그러나 임시 디렉토리는 웹 응용 프로그램 루트 디렉토리와 관련이 없습니다. 웹에 접근 할 수 없습니까? – JonathanWolfson

+0

필요는 없습니다. asp.net 사용자 (일반적으로 네트워크 서비스 사용자)는 부여 된 사용 권한이있는 모든 폴더에 액세스 할 수 있지만 이러한 사용 권한은 기본적으로 시스템 설정 및 신뢰 수준에 따라 다릅니다. 하지만 난 asp.net 웹 사이트에서 문제없이 여러 번 사용했습니다. –