2009-11-24 2 views
0

내가 그래서 난이 질문을 물어보고 싶은 전에이 요청되지 않았 음을 발견했습니다 ...업로드 파일은 일부 매우 큰을 업로드 업로드 컨트롤러를 작성 asp.net의 MVC

현재 메신저를의 램합니다 파일. 하지만 난이 큰 파일을 업로드 할 때 통지, CPU와 RAM은 피크를 가서이 같은 내가 (물론 너무)

내 컨트롤러가보고되고 싶은 정말되지 않습니다 :

int Count = 0; 
     string _uploadsFolder = HostingEnvironment.MapPath("~/Upload/Files/Images/"); 

     for (int i = 0; i < Request.Files.Count; i++) 
     { 
      HttpPostedFileBase _file = Request.Files[i]; 

      // Validation ...... 
      FileMIME mimetype = new FileMIME(); 
      mimetype.AllowedMimeTypes.Add("image/png"); 
      mimetype.AllowedMimeTypes.Add("image/jpeg"); 
      mimetype.AllowedMimeTypes.Add("image/gif"); 

      if ((_file.ContentLength > 0) && (_file.ContentLength < 4194304) && (mimetype.IsImage(_file))) 
      { 
       string guid = Guid.NewGuid().ToString(); 
       string _fileLocation = Path.Combine(_uploadsFolder, Path.GetFileName(_file.FileName)); 

       _file.SaveAs(_fileLocation); 

       Count++; 
      } 
     } 

어쨌든 거기 RAM 대신 HDD에이 버퍼를 만드시겠습니까?

+0

클라이언트 응용 프로그램이란 무엇입니까? IIS가 HTTP PUT을 처리 할 수 ​​있다고 생각합니다. HTTP PUT은 자원 집약도가 훨씬 적습니다. –

+0

예, 현재 IIS 대신 – DucDigital

답변

0

내가 확실히 모르는 ... 대단히 감사합니다,하지만 어떻게 CPU와 RAM을 사용하지 않고 하드 드라이브에 얻을 것? 서버가 하드 드라이브에 쓰기 위해 RAM을 통해 스트림을 처리해야하는 것처럼 보입니다.

+0

을 사용하여 RAM 대신 Hardisk에 버퍼를 넣었습니다. 현재 프로그램은 RAM에 1GB 파일을 모두로드 한 다음 나중에 HDD에 저장합니다. 때로는 내 MVC 응용 프로그램을 잠글 – DucDigital

0

웹 페이지에서 오는 경우 클라이언트 컴퓨터에서 서버로 가져 오기 위해 메모리에 스트림을로드해야합니다. 이 문제를 해결할 방법이 없다고 생각합니다.

서버의 부하를 줄일 수있는 방법이있을 수 있습니다. 사용자는 상대적으로 자유롭게 계속 비동기로 수행 할 수 있습니다.

데이터 스트림을 청크로 한꺼번에 처리 할 수 ​​있습니다.

다른 것들도 있지만 이것들은 모두 여전히 램을 사용하려고합니다.

이미지를 허용하는 것처럼 보입니다. 데이터베이스에 저장하기 전에 메모리에있는 이미지의 크기를 조정할 수 있습니다. 그러면 파일을 가지고 있지만 나중에 파일을 업로드 할 때 RAM을 사용하여 RAM에 대한 향후로드를 줄일 수 있습니다.

(다른 방법으로는) 사용자가 파일을 사이트로 ftp하고 테이블의 항목으로 파일을 참조하도록 허용하는 것이 좋습니다.

시도한 적은 없지만 웹 앱을 통해이 작업을 수행 할 수도 있습니다.

+0

RAM과 CPU가 사용자가 내 서버에 데이터를 업로드하므로 RAM과 CPU가 정상적으로 작동하지 않으므로 비동기를 수행하는 것이 실제로 가능하지 않을 것이라고 생각합니다. 따라서 사용자가 페이지를 변경하면 작업이 취소되고, 안 그래? – DucDigital

+0

그래, 내가 실제로이 문제를 해결할 것이라고 생각하지 않는다고 말했듯이. 나는이 @DucDigital 주위에 어떤 방법이 있다고 생각하지 않는다. 한 번에 컴퓨터에서 다른 컴퓨터로 파일을 전송한다는 사실은 어떤 종류의 스트림을 사용해야한다는 것을 의미하며 램을 사용할 것입니다. 파일의 크기를 제한하는 것이 나의 추천 일 것입니다. 그런 식으로 램 사용량이 커지지 않고 처리 시간도 단축됩니다. – griegs

+0

하지만 atee 내가 지불 한 asembly 일부 보았다. 이러한 일을 처리하기위한 .net .net 디스크의 파일을 업로드하는 버퍼 수 있습니다, 그냥 현재 알지 방법 :) – DucDigital