2013-05-19 1 views
5

내 응용 프로그램 용 API를 만들고 있습니다. GUI 브라우저 기반 응용 프로그램에서 파일은 양식 제출을 통해 업로드됩니다. 그래서 나는 단지 CommonsMultipartFile file = request.getFile(myfile)을합니다. 그러나 API는 파일을 업로드하는 대신 파일의 절대 경로를 문자열로 제공합니다. 내 응용 프로그램은이 절대 경로에 액세스 할 수 있습니다.절대 파일 경로에서 CommonsMultipartFile을 만드는 방법은 무엇입니까?

일반 응용 프로그램의 기본 메서드를 변경하지 않아도됩니다. (공용 인터페이스를 사용하는 경우 MultiPartFile) API를 사용하려면이 절대 경로에서 파일을 읽고 전달할 수있는 CommonsMultipartFile 개체를 만들고 싶습니다. 주변에 이미 GUI 브라우저 기반 응용 프로그램을 위해 사용하고있는 방법에 관한 것이다. 나는이 작업을 수행 할 수있는 방법

? CommonsMultipartFile에 생성자이 API 고유의 코드이다. 즉이 아닌 보통의 파일 업로드 코드 FileItem

+0

귀하의 진술 CommonsMultipartFile file = request. (myfile)과 다소 혼동 스럽습니다. 파일 업로드 API는 항목 목록을 반환합니다. 목록 항목 = fileUpload.parseRequest (요청); 그게 당신이 말하는 겁니까? – Zenil

+0

@Zenil 죄송합니다.이 파일은'request.getFile ('myfile')' – Anthony

+0

이어야합니다.'RandomAccessFile'을 사용할 수 있습니다. 다음은 그 예입니다. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –

답변

2

을 받아들입니다.

(210)

일반적인 단계로 다음과 같습니다,

  1. 구조의 FileItemFactory
  2. 구조의 ServletFileUpload 그것을 공장을 통과
  3. 통화 ServletFileUpload.parseRequest (요청)

이 답변이 논리 2 & 3 대체 서블릿과 무관하게 ServletFileUpload (서블릿 전용)와 조상 인 FileUpload (절대 경로 이름으로 파일 위치를 제어)를 사용하지 않습니다. 참고 : (3)은 보통 HTTP 요청 매개 변수를 검사하여 FileItemFactory.createItem에 전달되는 하위 수준 매개 변수를 결정합니다. 이러한 매개 변수는 수동으로 제공되고 정보 용 메타 데이터로만 사용됩니다. 2 & 3 체

  • 은 (FileItemFactory.createItem 통해 - 수동 일반적 ServletFileUpload.upload()를 통해 결정된 낮은 레벨 파라미터 제공해야) FileItem를 구성 절대적으로 특정 파일
  • 쓰기,
  • 경로
  • 은의 MultipartFile

아래에 제공된 요청 코드를 통해 파일을 업로드 할 수 있습니다. 마지막에는 Servlet 업로드와 공유되는 공통 코드를 호출합니다.

// Initialise Apache Commons FileItemFactory for API use only 
FileItemFactory fif = new DiskFileItemFactory(sizeThreshold, repositoryBaseDirFile); 

// Create Apache Commons FileItem & write file at fullFilePathString into it 
FileItem fi = fif.createItem(fieldName, contentType, isFormField, fileName); 
fi.write(new java.io.File(new java.net.URI(fullFilePathString)); 

// Convert FileItem to Spring wrapper: CommonsMultipartFile 
org.springframework.web.multipart.MultipartFile mf = new CommonsMultipartFile(fi); 

// From here, reuse the same code as the servlet upload. Operate only upon 
// Spring MultipartFile, but not ServletFileUpload, FileItemFactory etc... 

파라미터 :

  • fullFilePathString : 절대 경로 (문자열로) 파일
  • fieldName에
  • 업로드한다 : 폼 필드 이름

(Be 바이트 메모리 사이즈 임계치 (일반적 작은 파일은 전용 파일 메모리를 이용하여 업로드 : ServletFileUpload &는 FileUpload는 오직 다음가 메타 데이터 필드를 회피 등)

  • sizeThreshhold 처리를 제어하는데 사용되지 않는 원인 큰 파일은 디스크를 통해 업로드되지만이 논리에는 항상 디스크를 통해 업로드되는 파일이 있습니다). 기본값은 DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD입니다.
  • repositoryBaseDireFile는 : 필드의 콘텐츠 형식 (MIME 타입)에 : 일반적으로 (파일 형식으로) 파일 업로드 '임시'디렉토리하지만이 논리 파일
  • contentType이을 업로드 할 절대 경로를 사용 양식 (다중 부분 양식 필드가 아닌 경우 null)
  • isFormField : 일반 양식 필드 인 경우 'true'이고, 그렇지 않은 경우 여러 부분 필드 인 경우 false입니다.
  • fileName : 파일 이름 (일반적으로 양식/클라이언트를 통해 지정됨).
+0

나쁜 예입니다. params에 어떤 실제 값을 넣을지 전혀 모르겠습니다. –

+0

하단에 텍스트가 추가되었습니다. 이것을 구현한다면 javadocs를 통해 params와 높은 수준의 동작을 이해할 수 있습니다. 참고 Q는 구체적입니다 - 기존의 A.C. 서블릿 파일 업로드 솔루션 및 API 솔루션의 일부를 가지고 CommonsMultipartFile을 추가해야합니다. 매개 변수를 숫자와 문자열로 바꾸면 아마도 덜 알려줄 것입니다. 이 분야에서 일하고 있다면, 일반적인 연습은 '칩 인 (chip in)'하고 여기에 새로운 정보와 답변을 추가하는 것입니다. (BTW, 친숙한 팁 : '친구'는 인스 타 그램, 대화방 등에서 만났거나 다른 사람과 만났을 때 좋습니다 :-)) –