读书人

commons-fileupload对来源于不同系统客

发布时间: 2012-12-18 12:43:41 作者: rapoo

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 楼主这个说法让我有些疑惑,可能是我从来没有想过获取路径吧。我表示:目前为止,都是获得文件名为目的,至于其路径,没有意义。

读书人网 >编程

热点推荐