您的位置:首页 > Web前端 > JavaScript

jsp中用fileupload组件上传文件遇到的问题

2013-07-27 19:47 405 查看
之前做了参考网上fileupload组件写了一个文件上传下载的简易系统,其中遇到一些问题,在这里作一些记录:

1.关于文件的存放位置

可根据文件的类型或者所属的项目分开存放,用mkdirs方法即可,

File dirFile = new File(filepath);
if(!(dirFile.exists()) && !(dirFile.isDirectory())){
dirFile.mkdirs();
}

2.关于文件重命名,此处我采用了原名+年月日+序号+后缀来命名,这样的话比较方便管理,也便于直接查看其上传日期,

public class FileRename {
public String getNewFileName(String originalFileName, String middleName, String filepath) {

StringBuffer newFileName = new StringBuffer();
if (null != originalFileName && !"".equals(originalFileName)) {
int no = 1;
int port = originalFileName.lastIndexOf(".");
String type = "";
String fileName = "";
if (port != -1) {
type = originalFileName.substring(port + 1);
}
fileName = middleName;
JsonDateValueProcessor jdvp = new JsonDateValueProcessor();
JsonConfig jc = new JsonConfig();
StringBuffer suffix = new StringBuffer("");
suffix.append(jdvp.processArrayValue(new Date(), jc));
do {
newFileName.delete(0, newFileName.length());
newFileName.append(fileName);
newFileName.append(suffix);
newFileName.append("-");
if (no < 10) {
newFileName.append("000" + String.valueOf(no));
} else if (no < 100) {
newFileName.append("00" + String.valueOf(no));
} else if (no < 1000) {
newFileName.append("0" + String.valueOf(no));
}

newFileName.append(".");
newFileName.append(type);
no++;
} while (new File(filepath + "\\" + newFileName).exists());
}
return newFileName.toString();
}
}


直接调用这个类方法即可实现重命名

3.多文件上传:

if (item.isFormField()) {
//do something
}else{
//fileupload
}
这样便可轻松实现多文件上传

4.时间监控进度

采用progresslistener监听上传进度,界面settimeout即可实时获取上传进度,这部分界面就暂且使用文字描述了(%)

public class MyProgressListener implements ProgressListener{
private HttpSession session;
private FileUploadStatus fileuploadstatus;
public MyProgressListener(HttpServletRequest request){
session = request.getSession();
}
public void update(long pBytesRead,long pContentLength,int pItems){
System.out.println("Listener is been used");
fileuploadstatus = (FileUploadStatus) (session.getAttribute("fileUploadStatus")
== null ? new FileUploadStatus() : session.getAttribute("fileUploadStatus"));
fileuploadstatus.setpBytesRead(pBytesRead);
fileuploadstatus.setpContentLength(pContentLength);
fileuploadstatus.setpItems(pItems);

session.setAttribute("fileUploadStatus", fileuploadstatus);
}
}


5.关于文件下载

只需找到文件路径,这里我设置的是上传的路径,因为上传直接可以下载,所以放在了一起

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String filepath = new String(request.getParameter("filePath").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(filepath);
String fileName = new String(request.getParameter("fileName").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(fileName);
FileInputStream fis = new FileInputStream(new File(filepath + "\\" + fileName));
System.out.println("Client type:" + request.getHeader("User-Agent"));
if(request.getHeader("User-Agent").contains("MSIE")){
response.addHeader("content-disposition", "attachment;filename=" +
java.net.URLEncoder.encode(fileName,"UTF-8"));
}else{
response.addHeader("content-disposition", "attachment;filename=" +
request.getParameter("fileName"));
}
ServletOutputStream sos = response.getOutputStream();
int count = 0;
byte[] bytes = new byte[1024];
while((count = fis.read(bytes)) != -1){
sos.write(bytes, 0, count);
}
sos.flush();
sos.close();
}


这样便可实现对指定文件的下载

6.文本域和文件域的区分

和多文件上传一样判断,对应获取输入框的值即可.

至此文件上传下载的基本功能算是完成了接下来准备继续完善此系统,比如说加上一个断点续传.尽量完善吧.

在此感谢网上大牛们,这次功能很多都是从网上找的资料实现的.thanks.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息