commons-fileupload对来自不同系统客户端文件传输的细微差别
用commons-fileupload进行文件上传,对于不同的系统有略微的差别
?
将得到的FileItem进行迭代,通过getName方式可以得到文件的文件名,但有如下问题需要注意
?
XP系统传输过来,得到的getName是全路径+文件名+后缀名,如:
C:\Documents and Settings\Administrator\My Documents\My Music\god.mp3
?
WIN7系统传输过来,得到的getName只是文件名+后缀名。如:
god.mp3
?
服务器是WIN7
?
一个小知识点,算是写下来,留个印象。
?
?
下面贴上源码
package com.cug.action;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadAction extends HttpServlet {public UploadAction() {super();}public void destroy() {super.destroy(); // Just puts "destroy" string in log// Put your code here}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request,response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);try {List items = upload.parseRequest(request);Iterator iter = items.iterator();while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { //是表单域 } else { String fileName = item.getName(); System.out.println("fileName "+fileName); if(fileName.indexOf("\")!=-1){ int i = fileName.lastIndexOf("\"); fileName = fileName.substring(i); } System.out.println("fileName "+fileName); String path = this.getServletContext().getRealPath("\\upload"); System.out.println("path+fileName "+path+fileName); File file = new File(path+"\"+fileName); try {item.write(file);} catch (Exception e) {e.printStackTrace();} }}} catch (FileUploadException e) {e.printStackTrace();}}public void init() throws ServletException {// Put your code here}}?
?
?
<!--EndFragment--> 1 楼 mfkvfn 2012-11-05 与操作系统无关,与浏览器及版本有关。