2013-05-19 15 views
5

Uygulamam için bir API oluşturuyorum. GUI tarayıcı tabanlı uygulamada dosya bir form gönderimi yoluyla yüklenir. Bu yüzden ben sadece CommonsMultipartFile file = request.getFile(myfile) yapıyorum. Bununla birlikte, API, dosyaya dosya yüklemek yerine bir dizge olarak mutlak bir yol sağlayacaktır. Benim başvurum bu mutlak yola erişebilecek.Mutlak dosya yolundan CommonsMultipartFile nasıl oluşturulur?

API amacıyla ortak bir arayüz MultiPartFile kabul benim uygulamanın altında yatan yöntemleri (değiştirmek zorunda kalmamasıdır Yani, bu mutlak yolundan dosyayı okumak ve geçirilebilir bir CommonsMultipartFile nesne oluşturmak istiyoruz etrafında zaten GUI tarayıcı tabanlı bir uygulama için kullanıyorum yöntemlerine ilişkindir. bunu nasıl

? CommonsMultipartFile için Oluşturucu Bu API özgü bir koddur. yani her zamanki dosya yükleme kodu FileItem

+0

CommonsMultipartFile file = request. (Myfile) ifadenizle biraz kafam karıştı. Dosya yükleme api, bir öğe listesi döndürür. Liste öğeleri = fileUpload.parseRequest (istek); Ne demek istiyorsun? – Zenil

+0

@Zenil özür dileriz, bu 'request.getFile ('myfile')' – Anthony

+0

olmalıdır 'RandomAccessFile' kullanabilirsiniz. İşte örnek. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –

cevap

2

kabul eder.

Olağan adımlar olacaktır:

  1. yapı FileItemFactory
  2. yapı ServletFileUpload o fabrikayı geçen
  3. çağrı ServletFileUpload.parseRequest (istek)

Bu cevap mantığıyla 2 & 3 değiştirir Servlet'lerden bağımsız olarak - ServletFileUpload (servlete özel) ve onun ataları FileUpload'u (dosya konumunu mutlak yol adıyla kontrol etmek için) kullanmayı önler. Not: (3) genellikle FileItemFactory.createItem'e iletilen alt düzey parametreleri belirlemek için HTTP istek parametrelerini inceler - bu parametreler el ile sağlanır ve yalnızca bilgi amaçlı meta veriler olarak kullanılır. 2 & 3 için yedek:

  • (FileItemFactory.createItem ile - elle genellikle ServletFileUpload.upload() üzerinden tespit edilen alt düzey parametreleri, sağlamak için ihtiyaç) FileItem yapısı mutlak belirli bir dosya için
  • yazma,
  • yol
  • MultipartFile

aşağıda verilmiştir Talep edilen kod aracılığıyla dosyayı yükleyin. Sonunda ortak kodu çağırır - Servlet yükleme ile paylaşılır.

// 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... 

Parametreler:

  • fullFilePathString: mutlak yol (Dize gibi) dosya
  • fieldName
  • yüklenecektir: Formdaki alanın adıdır

(Be bayt bellek boyutu eşiğini (genellikle dosyalar daha küçük sadece ve dosyalar bellek kullanılarak yüklenir: ServletFileUpload & FileUpload, yalnızca aşağıdaki haline meta veri alanlarını kaçınılır ve)

  • sizeThreshhold işlenmesi kontrol için kullanılmaz neden daha büyük disk üzerinden yüklenir - ancak bu mantık dosyaları her zaman disk üzerinden yüklenir). Varsayılan = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD.
  • repositoryBaseDireFile: alanın içerik türü (MIME türü) tarih: genellikle (Dosya türü olarak) dosya yükleme 'geçici' dizini, ancak bu mantık dosyayı
  • contentType yüklemek için mutlak bir yol kullanır form (çok parçalı form alanı yoksa null)
  • isFormField: düz form alanı, 'true' ise, çok parçalı alan varsa yanlış. Dosya adı - genellikle form/istemci ile belirtilmiş olan dosyanın adı.
+0

bozuk örnek dostum. Param sistemlerinde gerçek değerlerin neler olduğu konusunda hiçbir fikrim yok. –

+0

Metin altta eklendi. Eğer bunu uygularsanız, ben * hala * paranormalleri ve üst düzey davranışları anlamak için javadocs'a bakmanızı beklerim. Not Q özgüdür - CommonsMultipartFile eklenmesi gereken A.C. servlet dosya yükleme çözümü ve API çözüm parçası, önceden var. Paramları sayılarla ve dizelerle değiştirmek muhtemelen size daha az şey söyleyecektir. Bu alanda çalışıyorsanız, ortak uygulama 'çip' olmak ve buraya yeni bilgi ve cevaplar eklemektir. (BTW, arkadaş canlısı ipucu: 'dostum' instagram, sohbet odaları, vb. Veya tanıştığınız biri ile daha iyi kullanılabilir :-)) –

İlgili konular