2009-07-15 4 views
37

FileUpload 컨트롤을 사용하는 웹 응용 프로그램에서 작업하고 있습니다. 업로드하려고 시도하는 전체 파일 경로 'C : \ Mailid.xls'에 xls 파일이 있습니다. FileUpload 컨트롤을 사용하여 파일의 전체 경로 가져 오기

나는 내 시스템에서 전체 파일 경로를 얻을 수있는 명령을

FileUpload1.PostedFile.FileName 

를 사용

. 그러나, 다른 시스템에서 위의 명령을 사용하면 정상적으로 작동합니다.

System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName); 
    Path.GetFileName(FileUpload1.PostedFile.FileName); 
    System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).ToString(); 
    Convert.ToString(System.IO.Directory.GetParent(FileUpload1.PostedFile.FileName)); 

가 어떻게 전체 경로를 얻을 수 있습니다 :

는 또한 성공없이 다음과 같은 명령을 시도?

+0

감사? 정확히 당신이해야 할 일은 무엇이며, 어떻게해야합니까? 질문을 이해할 수 없습니다. – Strae

+1

자세한 정보를 제공해야합니다 (게시물 수정). 언어, 플랫폼 오류 메시지가 무엇입니까. 편집자 코드 버튼을 사용하여 코드의 형식을 지정하십시오. – Nifle

답변

10

Server.MapPath(FileUpload1.FileName); 

편집을 시도해보십시오이 대답은 서버에있는 파일의 경로를 얻는 방법에 대해 설명합니다. 이 질문에는 클라이언트에서 파일 경로를 가져 오는 방법이 설명되어 있지 않습니다. 이 질문에 대한 대답은 "당신은 할 수 없습니다"입니다. 왜냐하면 현대적인 브라우저는 보안 상 클라이언트의 경로를 알려주지 않기 때문입니다.

+17

이 작동하지 않습니다. 응용 프로그램 루트가 C : \ MySource \ MyProject \라고 가정하면 Server.MapPath ("Mailid.xls")는 C : \ MySource \ MyProject \ Mailid.xls 대신 C : \ Mailid.xls를 제공합니다. . – daniloquio

+6

왜 이것이 정답으로 표시되고 6 개의 업보가 있습니까? – Quannt

+2

죄송합니다. 실제로 원래의 문제는 해결되지 않았습니다. –

7

FileUpload는 보안상의 이유로 절대 경로를 제공하지 않습니다.

+0

안녕하세요 답장을 보내 주셔서 감사합니다. 그러나 다른 시스템에서 전체 경로를 표시하는 명령. 가능한 방법. – Dhanraj

+0

fileUpload를 사용하면 파일의 클라이언트 시스템의 전체 경로를 가져올 수 없습니다. 안돼. FileUpload는 파일 업로드를 처리 할 수 ​​있으므로 경로에 대해 걱정할 필요가 없습니다. 다른 방법 (예 : System.IO.Path 또는 MapPath 또는 다른 방법)을 통해 파일의 전체 경로를 얻었을 수 있습니다. 그러나 FileUpload를 사용하여 전체 경로를 얻는 것은 의심 스럽습니다. – waqasahmed

16

아마 FileUpload의 방식을 오해 할 것입니다.

파일을 업로드하면 클라이언트 컴퓨터에서 응용 프로그램을 호스팅하는 서버로 효과적으로 전송됩니다. 응용 프로그램을 개발하는 경우 대부분 클라이언트와 서버가 동일한 컴퓨터 (컴퓨터)입니다. 그러나 응용 프로그램이 배포되면 서버에 연결하는 클라이언트 수가 달라질 수 있으며 각기 다른 파일을 업로드 할 수 있습니다.

클라이언트의 컴퓨터에서 파일의 전체 경로를 알면 일반적으로 필요하지 않습니다. 파일 내용으로 무언가를하고 싶을 때가 많습니다. 귀하의 예제는 ASP.NET C#처럼 보이므로 FileUpload 컨트롤을 사용하고있는 것 같습니다. 원시 스트림 (FileUpload.PostedFile.InputStream)을 읽거나 파일을 먼저 저장 (FileUpload.PostedFile.SaveAs) 한 다음 저장된 파일에 액세스하여 업로드 된 파일의 내용을 가져올 수 있습니다. 현재 요청 후에도 파일에 액세스하려면 파일을 저장하는 것은 사용자의 책임입니다. 그렇지 않으면 ASP.NET에서 파일을 삭제합니다.

한 가지 더 - 양식의 enctype 속성을 "multipart/form-data"로 설정하는 것을 잊지 마십시오. 그렇게하지 않으면 클라이언트의 브라우저가 파일을 보내지 않고 무엇이 잘못되었는지 궁금해 할 것입니다.

+0

웹 응용 프로그램을 개발 중입니다. 파일 업로드 컨트롤을 사용하여 파일을 탐색하고 있습니다. 제대로 작동했습니다. 오늘 IE 8을 설치했습니다. 설치 후 파일의 전체 경로를 가져올 수 없습니다. 무엇이 문제 일 수 있습니까? 이벤트 IE 8을 제거했습니다. 현재 IE 7을 사용하고 있습니다. – Dhanraj

+1

이 파일은 저에게 효과적이었습니다 :'FileUpload.PostedFile .FileName' 감사합니다 elo80ka – Somebody

+0

그게 전부였습니다. 해당 컨트롤의 기본 기능을 잊어 버렸습니다. – Stanton

0

클라이언트 컴퓨터에서 파일의 전체 경로를 가져올 수 없습니다. 클라이언트와 서버가 동일한 시스템이고 파일이 루트 디렉토리에 있기 때문에 코드가 localhost에서 작동 할 수 있습니다. 그러나 원격 시스템에서 실행하면 예외가 발생합니다.

+0

웹 응용 프로그램을 개발 중입니다. 파일 업로드 컨트롤을 사용하여 파일을 탐색하고 있습니다. 제대로 작동했습니다. 오늘 제가 IE 8을 설치했습니다. 설치 후 나는 문제가 될 수있는 파일의 전체 경로를 얻을 수 없습니다. 이벤트 IE 8을 제거했습니다. 현재 IE 7을 사용하고 있습니다. – Dhanraj

28

현재 입니다. "파일을 업로드 할 때 브라우저는 전체 경로가 아닌 원본 파일 이름 만 보냅니다"라는 사실은 사실입니다. 서버가 파일이 "C : \ WINDOWS \ "또는"F : \ SOMEDIR \ OTHERDIR \ PERSONALINFO \ ". 파일 은 항상 전송되며 사용자가 콘텐츠를 인식하고 파일 형식을 확인하는 데 도움이되는 파일 확장명을 조사하는 데 유용합니다.

그러나 인터넷 익스플로러는 분명히 에 익숙하며 (이전 버전)에서 전체 경로를 보내고 있습니다.그것은 당신이 사용하거나 기 대해서는 안,

Internet Explorer가

에 관계없이 단지 기본 파일 이름을 업로드 된 파일에 전체 경로를 제공하지 (이 apache fileupload control doco 제외) 권위있는 확인을 찾기 어렵 년대 모든 '현대적인'브라우저에서 전송할 전체 경로

+10

.FileName 속성 파일 이름 만 포함하고 다른 것은 포함하지 않습니다. 때로는 완전히 quanlified 경로를 포함 할 수 있습니다. 대부분의 경우 파일 이름입니다. 그것은 클라이언트 브라우저의 나이에 달려 있습니다. 어쨌든 반드시 Path.GetFileName (fileUpload.FileName)을 감싸서 경로명이 아닌 파일명을 확실히 보장해야합니다. (Path 유틸리티 클래스는 System.IO 네임 스페이스에 있습니다.) –

+6

Internet Explorer 8은 인터넷 영역에서 파일 이름 만 제공하도록 수정되었지만 로컬 인트라넷 영역에서는 여전히 전체 경로를 보냅니다. @Sunday Ironfoot에 Path.GetFileName 제안을 +1하십시오. –

+0

IE 정보에 @conceptdev에 감사드립니다! – Thousand

3

IE 7 및 이전 버전은 input type="file" 필드와 관련된 서버에 업로드 된 파일의 전체 경로를 보냈습니다. 파이어 폭스와 다른 최신 브라우저들은 이것을 보안 허점으로 간주하고 그렇지 않습니다. 그러나 이것은 IE 8에서 수정 된 것으로 보입니다.

아마도 클라이언트 시스템에 있던 파일의 전체 경로가 필요한 이유를 평가해야 할 것입니다. 나는 결코 정말로 게시되어서는 안되는 불필요한 정보라고 생각합니다. 이름을 변경하지 않고 파일을 저장할 수 있도록 파일 이름 만 고려하면됩니다.

2

그냥 2 센트 줘.

이 순간 나는 또한 전체 사용자의 로컬 경로를 얻습니다. 1 대의 컴퓨터에서만이 문제를 복제 할 수 있지만 실제로는 사용자의 컴퓨터에서 파일의 전체 경로를 제공합니다.

이것은 외부 서버에서 호스팅되는 Google 애플리케이션의 최종 사용자입니다. 따라서 로컬 시스템이나 로컬 서버에서 공유가 될 수 없습니다.

당신은 문제를 해결할 수

는, 적어도 동일한 동작이 모든 시간을 가지고 : http://www.eggheadcafe.com/community/aspnet/17/10092650/fileupload-control-pro.aspx

단지에 :

Path.GetFileName(fileUpload.FileName) 

Btw는을, 그냥 너무 일어날 수있는 상태이 문서 발견 문제를 확인하십시오.

2

필자는 원래의 포스터와 반대되는 문제가있었습니다. 파일 이름 만 원할 때 전체 경로를 얻었습니다. 나는 파일명을 얻기 위해 Gabriël의 솔루션을 사용 했었지만 그 과정에서 나는 왜 당신이 다른 기계가 아닌 다른 기계에서 완전한 경로를 얻었는지 발견했다.

도메인에 가입 된 모든 컴퓨터는 파일 이름의 전체 경로를 제공합니다. 일관된 결과를 얻으려고 여러 대의 컴퓨터에서이 작업을 시도했습니다. 이유에 대한 설명이 없지만 적어도 테스트에서 일관성이있었습니다.

0

IE 8을 사용하고 있습니다 (두 대의 컴퓨터에서). 각각은 여전히 ​​전체 로컬 파일 경로를 업로드합니다. 가브리엘 (Gabriël)이 제안한대로.GetFileName (fileUploadControl.PostedFile.FileName)은 파일 이름 만 가져올 수있는 유일한 방법 인 것처럼 보입니다.

1

확인이 :

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="FileUp.aspx.vb" Inherits="FileUp" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="Label1" runat="server"></asp:Label><br /> 
     <asp:FileUpload ID="FileUpload1" runat="server" /><br /> 
     <asp:Button ID="Button1" runat="server" Text="Upload" /> 
    </div> 
    </form> 
</body> 
</html> 

코드 : URLAction이 위해에 "사용 안함"으로 설정되어 또한

Partial Class FileUp 
    Inherits System.Web.UI.Page 
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim path As String 
     Dim path1 As String 
     path = Server.MapPath("~/") 
     FileUpload1.SaveAs(path + FileUpload1.FileName) 
     path1 = path + FileUpload1.FileName 
     Label1.Text = path1 
     Response.Write("File Uploaded successfully") 
    End Sub 
End Class 
1

Check this post under FileUpload Control

이 (가) "파일을 업로드 할 때 로컬 디렉터리 경로 포함" 인터넷 영역. 이렇게 변경하면 잠재적으로 중요한 로컬 파일 시스템 정보가 인터넷으로 누출되지 않습니다. 예를 들어, 전체 경로 C : \ users \ ericlaw \ documents \ secret \ image.png를 제출하는 대신 Internet Explorer 8은 이제 파일 이름 image.png 만 제출합니다.

7
Convert.ToString(FileUpload1.PostedFile.FileName); 
0
Path.GetFullPath(fileUpload.PostedFile.FileName); 

죄송 사용할 수 있습니다 인터넷 보안 아래의 옵션이 '프로그램 파일 디렉토리 + 파일 이름을 얻을 것이다.

0

Internet Explorer 옵션의 보안 탭에서 사용자 지정 보안 단추를 클릭하면 일부 파일을 서버로로드 할 때 로컬 경로를 보낼 수있는 옵션이 있습니다.

기본적으로 사용 중지되었습니다. 활성화하십시오.

0
dim path as string = FileUpload1.PostedFile.FileName 

그런데 저는 Visual Studio 2010을 사용하고 있습니다. 다른 버전과 다른 점이 있는지는 잘 모르겠습니다.

1

임시 폴더에있는 파일을 파일 이름으로 덤프하고 그 다음에는 전화를 걸 수 있습니다. 걱정할 필요가 없습니다. 임시 폴더에 며칠 동안 있으면 삭제됩니다.

string filename = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(),".xls")); 
       File.WriteAllBytes(filename, FileUploadControl.FileBytes); 
+0

코드 예제와 함께 설명을 추가하는 것이 좋습니다. – krsteeve

0

IE 브라우저를 사용하면 문제가되지 않습니다. 이것은 다른 브라우저 용이며 다른 위치의 파일을 저장하고 해당 경로를 사용합니다.

경우 (FileUpload1.HasFile)

{

문자열 파일명 = FileUpload1.PostedFile.FileName;

문자열 TempfileLocation = @ "D : \ uploadfiles \";

문자열 FullPath = System.IO.Path.Combine (TempfileLocation, fileName);

FileUpload1.SaveAs (FullPath);

Response.Write (FullPath); }

당신이 일하는 무슨 언어에서는

관련 문제