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 与操作系统无关,与浏览器及版本有关。较新的浏览器认为服务器端并不需要知道客户端系统中文件的路径。这会导致客户端信息被泄漏这是不安全的做法,所以在新的浏览器中取消了文件所在的路径。可以通过在浏览器和安全设置(或高级设置)里进行配置让较新的浏览器中也显示出路径。不过并不建议这么做,建议后台不要知道这个。 2 楼 mfkvfn 2012-11-05 你可以在XP中使用最新版的Chrome或FireFox试验一下,也得不到文件路径的。 3 楼 freezingsky 2012-11-05 楼主这个说法让我有些疑惑,可能是我从来没有想过获取路径吧。我表示:目前为止,都是获得文件名为目的,至于其路径,没有意义。