在上传前你要往用户的cookie里放个标识,接收到上传文件后,也就是第一个请求,里面有文件名什么的基本信息,其中有个参数会告诉你一共有几个包,然后你把后续收到的该用户标识的几个包合并,还原成第一个包收到的文件名,这时候分片上传结束。
public String getName()
返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。
返回:
此抽象路径名表示的文件或目录的名称;如果路径名的名称序列为空,则返回空字符串
如果通过servelet来读取上传文件路径,则代码如下,我已经在项目中用过了:
DiskFileItemFactory difif = new DiskFileItemFactory();dififsetSizeThreshold(321024);dififsetRepository(new File(tmpDir)); //
用以上工厂实例化上传组件ServletFileUpload sfu = new ServletFileUpload(difif);
sfusetSizeMax(MAX_SIZE);
List fileList = sfuparseRequest(request);
if ( fileList == null || fileListsize() == 0) { throw new Exception("
导入文件不存在,请检
查");} else { File upLoadFile = null; Iterator fileIterator = fileListiterator();
//得到所有上传的文
件 while (fileIteratorhasNext()) { FileItem fileItem = (FileItem)fileIteratornext(); //
取得上传文件
名 if (fileItemgetContentType() == null) { } else {
//
此为路
径 String path = fileItemgetName(); String t_ext = pathsubstring(pathlastIndexOf("") + 1); //
根据系统时间生成上传后保存的文件
名 String prefix = StringvalueOf(SystemcurrentTimeMillis()); //
保存最终的文件完整路径,保存在工程根目录下的Upload目录
下 String u_name = tmpDir + Fileseparator + prefix + "" + t_ext; //
开始保存文
件 upLoadFile = new File(u_name); fileItemwrite(upLoadFile); } } }
可以使用commons-fileupload组件实现文件上传,步骤如下:
1、添加jar包:commons-fileupload-xxxjar和commons-io-24jar
2、编写或修改form表单
1) 提交方式必须是post
2) 为表单增加属性enctype="multipart/form-data"
3) 为文件上传单独提供servlet,因为增加enctype属性后,无法使用常规的请求对象来获取提交的数据
3、使用Commons-FileUpload组件实现文件的上传
1) 确定本次请求是否是文件上传请求
boolean flag=ServletFileUploadisMultipartContent(request);
2) 创建文件上传的工厂对象
FileItemFactory factory=new DiskFileItemFactory();
3) 创建ServletFileUpload对象,并将工厂对象作为参数传入
ServletFileUpload upload=new ServletFileUpload(factory);
4) 使用上传对象从请求对象中解析出提交的所有表单元素
List<FileItem> lstForms=uploadparseRequest(request);
5) 遍历表单元素集合,实现取出表单元素和上传文件
//遍历所有表单元素
for (FileItem fileItem : lstForms) {
//判断每一个表单元素是否是普通表单
if(fileItemisFormField()){
Systemoutprintln(fileItemgetString("UTF-8"));
}else{
//上传前准备工作
//a、上传后的路径thisgetServletContext()getRealPath("/")会出去当前项目在 部署的服务器上的绝对路径
String path=thisgetServletContext()getRealPath("/")+"files/";
//b、找出要上传的文件的名字
String fileName=fileItemgetName();
fileName=fileNamesubstring(fileNamelastIndexOf("\\")+1);
//c、上传
fileItemwrite(new File(path+fileName));
outprintln("<h2>"+fileName+"上传成功!</h2>");
后台获取到文件了么FilegetName就是文件名了
这个方法就是保存文件用的了 调用saveFile(filegetInputStrean,filegetName);
private void saveFile(InputStream inputStream, String fileName) {OutputStream os = null; try {
String path = "D:\\testFile\\"; // 2、保存到临时文件 // 1K的数据缓冲
byte[] bs = new byte[1024]; // 读取到的数据长度
int len; // 输出的文件流保存到本地文件
File tempFile = new File(path); if (!tempFileexists()) {
tempFilemkdirs();
}
os = new FileOutputStream(tempFilegetPath() + Fileseparator + fileName); // 开始读取
while ((len = inputStreamread(bs)) != -1) {
oswrite(bs, 0, len);
}
} catch (IOException e) {
eprintStackTrace();
} catch (Exception e) {
eprintStackTrace();
} finally { // 完毕,关闭所有链接
try {
osclose();
inputStreamclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
这个你可以这样实现,你在页面写一个<input type="hidden" name="files" id="files">,然后在你选择文件的时候,每选择一个,就把这个文件的名字加到这个files中,用,号隔开,这样就会有一个files=filename1,filenam2,filename3,filename4 这样你在后台获取files,然后用,号分割,就可以获取每个附件了
多个附件上传就是这样做的
<form action="uploadURL" method="post" enctype="multipart/form-data">
标题:<input type="text" name="tit" /><br/>
内容:<input type="text" name="te" /><br/>
1:<input type="file" name="img1"/><br/>
2:<input type="file" name="img2"/><br/>
<input type="submit" value="提交">
</form>
//创建硬盘文件工厂对象,设置上传的缓存区大小和临时文件
DiskFileItemFactory disk=new DiskFileItemFactory();
//实例化servlet上传的对象,把表单的数据都放在这个对象中
ServletFileUpload up=new ServletFileUpload(disk);
List<FileItem> list=upparseRequest(request);
//由于list中有普通表单和非普通表单 所以给定两个集合
Map<String,String> map=new HashMap<String, String>();
for(int i=0;i<listsize();i++){
FileItem item=listget(i); //获取表单的数据
if(itemisFormField()){//判断该数据属否是普通表单的数据
//获取普通表单的数据
String namename=itemgetFieldName(); //获取表单的名
String formvalue=itemgetString(); //获取输出的值
String value=new String(formvaluegetBytes("ISO-8859-1"),"utf-8"); //给获取的值 设置编码
//把普通表单的数据放入map中
mapput(namename, value);
}else{
//非普通
String filename=itemgetName(); ////获取文件名的名
//获取服务器上upload的地址
String rootpath=getServletContext()getRealPath("upload");
//获取文件的路径
String newpath=rootpath+"\\"+filename;
//写入文件
itemwrite(new File(newpath));
liadd(filename);
}
}
以上就是关于java后台怎么获取plupload上传的文件信息全部的内容,包括:java后台怎么获取plupload上传的文件信息、java.io.File类中获取文件名的方法是 。、java web项目java后台获取前台js上传文件的路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)