파일 업로드 컨트롤을 사용하여 파일의 전체 경로 가져오기
저는 파일 업로드 컨트롤을 사용하는 웹 애플리케이션을 작업하고 있습니다.전체 파일 경로 'C:'에 xls 파일이 있습니다.\Mailid.업로드하려는 xls'입니다.
명령을 사용할 때
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));
어떻게 하면 완전한 길을 갈 수 있습니까?
현재 "파일을 업로드할 때 브라우저는 원본 파일 이름만 보내고 전체 경로는 보내지 않는다"는 것은 사실입니다. 서버는 파일이 "C:\"에 있었는지 여부를 알 수 없습니다.WINDOWS\" 또는 "F:\SOMEDIR\"기타 DIR\개인 정보\".파일 이름은 항상 전송되며 사용자가 내용을 '인식'하는 데 도움이 되고 파일 확장명을 조회하여 파일 형식을 결정하는 데 도움이 될 수도 있습니다.
그러나 Internet Explorer(인터넷 익스플로러)가 (이전 버전에서) 전체 경로를 전송하는 데 사용되었다는 것은 경험을 통해 알고 있습니다.권한 있는 확인을 찾기가 어렵습니다(이 apache 파일 업로드 제어 도코 제외).
Internet Explorer는 기본 파일 이름뿐만 아니라 업로드된 파일의 전체 경로를 제공합니다.
그러나 모든 '현대' 브라우저에서 전체 경로를 사용하거나 예상해서는 안 됩니다.
아마도 당신은 방법을 잘못 이해하고 있을 것입니다.FileUpload
작동하다.
파일을 업로드하면 클라이언트의 컴퓨터에서 응용프로그램을 호스팅하는 서버로 파일이 효과적으로 전송됩니다.응용 프로그램을 개발하는 경우 대부분 클라이언트와 서버가 동일한 컴퓨터(컴퓨터)입니다.그러나 응용프로그램이 배포되면 서버에 연결된 클라이언트가 여러 개 있을 수 있으며, 각각 다른 파일을 업로드할 수 있습니다.
일반적으로 클라이언트의 컴퓨터에 있는 파일의 전체 경로를 알 필요는 없습니다. 파일 내용을 사용하여 작업을 수행하려는 경우가 많습니다.당신의 예는 ASP처럼 보입니다.NET C#입니다. 파일 업로드 컨트롤을 사용하는 것 같습니다.파일의 Stream (Raw Stream)을 알 수 .FileUpload.PostedFile.InputStream
먼저 으로써()FileUpload.PostedFile.SaveAs
한 다음 된 파일에 액세스합니다를 클릭한 다음 저장된 파일에 액세스합니다.현재 요청 후 액세스할 수 있도록 하려면 파일을 저장해야 합니다. 그렇지 않은 경우 ASP에 액세스를 저장해야 합니다.NET이 삭제합니다.
한 가지 더 - 설정하는 것을 잊지 마십시오.enctype
" 데이터에입니다."시작/양식 데이터"에 대한 속성을 입력합니다.그렇지 않으면 클라이언트의 브라우저가 파일을 보내지 않고 무엇이 잘못되었는지 궁금해하는 데 몇 분이 걸립니다.
해라
Server.MapPath(FileUpload1.FileName);
편집: 서버의 파일 경로를 가져오는 방법에 대해 설명합니다.질문 내용인 클라이언트의 파일 경로를 가져오는 방법에 대해서는 설명하지 않습니다.이 질문에 대한 대답은 "할 수 없습니다"입니다. 현대 브라우저는 보안상의 이유로 클라이언트의 경로를 알려주지 않기 때문입니다.
IE8 이후, 전체 경로는 더 이상 인터넷 영역의 사이트로 전송되지 않습니다.
자세한 내용은 이 게시물의 끝에 있는 "파일 업로드 제어" 섹션을 참조하십시오. http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
파일 업로드는 보안상의 이유로 전체 경로를 제공하지 않습니다.
Convert.ToString(FileUpload1.PostedFile.FileName);
7 및 를 IE 7 했습니다.input type="file"
파이어폭스와 다른 최신 브라우저들은 이것을 보안 결함으로 간주하고 그렇지 않습니다.그러나 이것은 IE 8에서 수정된 것으로 보입니다.
파일이 클라이언트 시스템에 있을 때 파일에 대한 전체 경로가 필요한 이유를 평가해야 합니다.나는 그것이 절대로 게시되어서는 안 되는 정말 불필요한 정보라고 생각합니다.파일 이름만 변경하면 파일 이름을 변경하지 않고 파일을 저장할 수 있습니다.
내 2센트를 주려고요.
또한 현재 전체 사용자의 로컬 경로를 확인할 수 있습니다.이 문제를 복제할 수 있는 것은 하나의 시스템뿐이지만 실제로는 사용자의 시스템에서 파일의 전체 경로를 제공합니다.
이 사용자는 오프사이트 서버에서 호스팅되는 응용프로그램의 최종 사용자입니다.따라서 로컬 컴퓨터나 로컬 서버에서 공유할 수 있는 것이 아닙니다.
이를 통해 문제를 해결할 수 있습니다. 적어도 항상 동일한 동작을 수행해야 합니다.
Path.GetFileName(fileUpload.FileName)
그나저나, 그런 일이 일어날 수도 있다는 기사를 방금 찾았습니다: http://www.eggheadcafe.com/community/aspnet/17/10092650/fileupload-control-pro.aspx
문제를 확인하기 위해서입니다.
저는 원래 포스터와 반대되는 문제를 가지고 있었습니다.파일 이름만 원했을 때 완전한 경로를 얻고 있었습니다.저는 가브리엘의 솔루션을 사용하여 파일 이름만 얻었지만, 그 과정에서 왜 당신이 다른 기계들이 아닌 어떤 기계들에서 전체 경로를 얻는지 알게 되었습니다.
도메인에 가입한 모든 컴퓨터가 파일 이름의 전체 경로를 반환합니다.저는 이것을 여러 개의 다른 컴퓨터에서 시도해 보았는데 결과가 일관되었습니다.그 이유에 대해서는 설명할 수 없지만, 적어도 제 테스트에서는 일관성이 있었습니다.
확인:
<%@ 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>
코드:
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
이렇게 하면 파일 이름이 지정된 임시 폴더에 파일이 덤프되고, 그 후에는 파일을 호출하여 걱정할 필요가 없습니다.일정 기간 동안 임시 폴더에 있으면 삭제되기 때문입니다.
string filename = Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(),".xls"));
File.WriteAllBytes(filename, FileUploadControl.FileBytes);
IE 8(두 대의 별도 기계에서)을 사용하고 있습니다.각 파일은 여전히 전체 로컬 파일 경로를 업로드합니다.가브리엘이 제안한 대로, 패스.GetFileName(fileUploadControl)입니다.게시된 파일.파일 이름)이 파일 이름만 가져올 수 있는 유일한 방법인 것 같습니다.
또한 "파일을 업로드할 때 로컬 디렉토리 경로 포함" URLAction이 인터넷 영역에 대해 "사용 불가능"으로 설정되었습니다.이렇게 변경하면 잠재적으로 중요한 로컬 파일 시스템 정보가 인터넷에 유출되는 것을 방지할 수 있습니다.예를 들어 Internet Explorer 8은 전체 경로 C:\users\ericlaw\documents\secret\image.png 대신 파일 이름 image.png만 제출합니다.
인터넷 보안에서 활성화할 수 있는 옵션입니다.
dim path as string = FileUpload1.PostedFile.FileName
그런데 저는 Visual Studio 2010을 사용하고 있습니다.다른 버전과 다른 점이 있는지 모르겠습니다.
우리가 IE 브라우저를 사용한다면 이것은 문제가 되지 않을 것입니다.이것은 다른 브라우저용입니다. 다른 위치에 파일을 저장하고 해당 경로를 사용하십시오.
if (FileUpload1).파일 있음)
{
string fileName = FileUpload1.게시된 파일.파일 이름;
string TempfileLocation = @"D:\uploadfiles\";
stringFullPath = System.IO.경로.결합(TempfileLocation, fileName);
파일업로드1.다른 이름으로 저장(전체 경로);
대답.쓰기(전체 경로);
}
감사해요.
클라이언트 컴퓨터에서 파일의 전체 경로를 가져올 수 없습니다.클라이언트와 서버가 동일한 컴퓨터이고 파일이 루트 디렉터리에 있기 때문에 코드가 localhost에서 작동할 수 있습니다.그러나 원격 시스템에서 실행하면 예외가 발생합니다.
Internet Explorer 옵션의 보안 탭에서 사용자 지정 보안 단추를 클릭하면 일부 파일을 서버에 로드할 때 로컬 경로를 보내는 옵션이 있습니다.
기본적으로 비활성화됩니다.사용 가능으로 설정합니다.
Path.GetFullPath(fileUpload.PostedFile.FileName);
죄송합니다. 프로그램 파일 디렉터리 + 파일 이름이 표시됩니다.
언급URL : https://stackoverflow.com/questions/1130560/get-full-path-of-a-file-with-fileupload-control
'programing' 카테고리의 다른 글
AJAX 호출 중 JS 변수 이름 끝에 있는 대괄호를 제거하려면 어떻게 해야 합니까? (0) | 2023.08.30 |
---|---|
웹사이트 요청 시 보낸 사용자 에이전트와 다른 Javascript 사용자 에이전트(jax) (0) | 2023.08.30 |
JQuery - 값으로 라디오 버튼 찾기 (0) | 2023.08.30 |
jquery Ajax 요청을 사용하여 시도/캐치 (0) | 2023.08.30 |
파일 내용을 powershell 호스트 창으로 출력합니다. (0) | 2023.08.30 |