当前位置: 代码迷 >> Java Web开发 >> java文件上传有关问题
  详细解决方案

java文件上传有关问题

热度:108   发布时间:2016-04-14 21:07:52.0
java文件上传问题

java.io.FileNotFoundException: F:\项目\.metadata\.me_tcat\webapps\UploadFile\wenjian\C:\Users\Administrator\Desktop\index.jsp (文件名、目录名或卷标语法不正确。)
来个高手帮忙看下,是哪里的路径不对吗
------解决思路----------------------
本地运行时,用绝对路径
服务器上运行时用相对路径
------解决思路----------------------
你那个文件名有问题,它包含了路径
------解决思路----------------------
filename不需要包含路径
------解决思路----------------------
引用:
本地运行时,用绝对路径
服务器上运行时用相对路径


怎么去掉
------解决思路----------------------
package com.str;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletExceptionIOException {
doGet(req, resp);
}


@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

HttpServletRequest request = (HttpServletRequest)req; 
HttpServletResponse response = (HttpServletResponse)resp; 

/* response.setContentType("text/html;charset=gb2312");
response.setCharacterEncoding("utf-8");*/

OutputStream outputStream = null;   
InputStream inputStream = null;

DiskFileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload fileUpload = new ServletFileUpload(factory);

try {
List items = fileUpload.parseRequest(request); 
for (Iterator iterator = items.iterator(); iterator.hasNext();) {   
FileItem name = (FileItem) iterator.next();               
if(!name.isFormField()){                     
String fieldName  = name.getFieldName();  //这个是name值
String fileName = name.getName();     //这个是全路径
String lastFileName ="";

//这句话获取的是源文件的原名称,不做任何修改
String oldNamePath = fileName.substring(fileName.lastIndexOf("\\")+1);

if(fileName.endsWith(".docx")
------解决思路----------------------
 fileName.endsWith(".xls")){

lastFileName = request.getRealPath("/")+"\\upload\\"+ oldNamePath;
outputStream = new FileOutputStream(new File(lastFileName )); 

inputStream = name.getInputStream();                  
byte[] bs = new byte[1024];                     
int length = 0;                     
while(null != inputStream && (length = inputStream.read(bs))!=-1){             
outputStream.write(bs);    
}  
}
outputStream.flush();
}                            
//把lastFileName存到数据库(这里就不写了不只lz用的什么方式)} 
}
} catch (Exception e) {
e.printStackTrace();


}
}

------解决思路----------------------
上面的代码,只要你指定的文件夹下有对应的文件就可以了,最好是假个判断
------解决思路----------------------
filename包含了你上传的那个文件的路径,用substring先切割出来后缀名(.jsp),为了区分最好用uuid作为文件名,例如(uuid.jsp),然后再跟路径拼接一起作为上传的路径
  相关解决方案