javaweb上传文件Word下载.docx
《javaweb上传文件Word下载.docx》由会员分享,可在线阅读,更多相关《javaweb上传文件Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
![javaweb上传文件Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/01914017-a9df-46c7-a288-5304a65c8964/01914017-a9df-46c7-a288-5304a65c89641.gif)
form-data;
name="
name"
【空行】
澶у濂?
-----------------------------7dd10711a052c又一个新的文件开始了
file"
;
filename="
aa.txt"
Content-Type:
text/plain
Hello
-----------------------------7dd10711a052c--
3.2、服务器如何获取到数据呢?
通过request.getParmeter获取enctype=multipart/form-data表单中的数据,是获取不到的。
只能通过req.getInputStream–获取到是请求的所有正文。
C以下是代码是自己解析文件上传:
publicclassUpServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
//设置编码
request.setCharacterEncoding("
UTF-8"
);
//测试获取数据
Stringname=request.getParameter("
System.err.println("
nameis:
"
+name);
+===================================="
StringcontentType=request.getHeader("
Content-Type"
contentType=contentType.substring(contentType.lastIndexOf("
="
)+1);
contentTyupeis:
+contentType);
//获取所有字节数
InputStreamin=request.getInputStream();
//byte[]b=newbyte[1024];
//intlen=0;
//while((len=in.read(b))!
=-1){
//Strings=newString(b,0,len);
//System.err.print(s);
//}
以下是正文:
BufferedReaderbr=newBufferedReader(newInputStreamReader(in));
Stringline=null;
br.readLine();
while((line=br.readLine())!
=null){
if(!
line.contains(contentType)){
System.err.println(line);
}
}
}
}
3.3、用第三方组件实现文件上传
组件名称
说明
公司
fileupload
用的最多,集成到struts中,重点。
Apache-1.2,3
cos
性能最快,struts支持配置的cos.
Orialliy=>
0.9
jspsmartupload
200M以上直接崩溃。
3.4、用fileupload实现文件上传
将jar包放到lib目录下
Fileupload的核心类:
DiskfileItemFactory:
设置文件上传时的缓冲区大小和临时目录。
ServletFileUpload:
上传核心文件,用于解析request。
从reqeust中解析出每一个File对象。
示例:
第一步:
开发一个Servlet
第二步:
创建一个保存文件的目录
第三步:
开发页面
3.5、对上传的代码进行优化
3.6、上传多个文件
就是在后台
List<
FileItem>
fis=ServletFileUpload.parseRequest(request);
遍历fis就可以了。
先开发界面:
开发Up3Servlet
封装上传的所有文件信息
名称,大小,类型
try{
ServletFileUploadup=newServletFileUpload(disk);
List<
fs=up.parseRequest(request);
Stringsavepath=getServletContext().getRealPath("
/up"
//声明一个集合,用于保存所有上传的文件信息
Map<
String,Object>
>
ups=newArrayList<
String,Object>
();
for(FileItemf:
fs){
//获取文件名
StringfileName=f.getName();
FileUtils.copyInputStreamToFile(f.getInputStream(),newFile(
savepath+"
/"
+fileName));
//每次一个新的map
Map<
map=newHashMap<
map.put("
fileName"
fileName);
size"
f.getSize());
type"
f.getContentType());
ups.add(map);
f.delete();
//转发到
request.setAttribute("
ups"
ups);
request.getRequestDispatcher("
/jsps/show.jsp"
).forward(request,response);
}catch(Exceptione){
e.printStackTrace();
第四步:
3.6、上传图片时解决重名问题-同时可以解决显示图片的问题
//对文件修改名称,保存扩展名
StringextName=fileName.substring(fileName.lastIndexOf("
."
));
Stringuuid=UUID.randomUUID().toString().replace("
-"
"
StringnewFileName=uuid+extName;
+newFileName));
//保存新的名称
newName"
newFileName);
3.7、上传文件时,能不能说明
mons.fileupload
InterfaceFileItem
开发一个页,带有说明的上传
开发Servlet
publicclassUp4ServletextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
DiskFileItemFactorydisk=newDiskFileItemFactory();
disk.setSizeThreshold(1024*10);
Filefile=newFile("
d:
/b"
if(file.exists()){
disk.setRepository(file);
try{
Map<
mm=newHashMap<
//遍历且判断是否是文件
if(f.isFormField()){
//则获取到它的文本的内容
Stringdesc=f.getString("
System.err.println("
说明是:
+desc);
mm.put("
desc"
desc);
}else{
StringfileName=f.getName();
FileUtils.copyInputStreamToFile(f.getInputStream(),
newFile(savepath+"
}
//放到req
mm"
mm);
/jsps/show2.jsp"
3.7、上传多个都带说明的
代码:
list=newArrayList<
//声明一个map
mm=null;
for(FileItemfi:
fs){
if(fi.isFormField()){
Stringdesc=fi.getString("
desc);
//放到list
list.add(mm);
}else{
StringfileName=fi.getName();
FileUtils.copyInputStreamToFile(fi.getInputStream(),
mm=newHashMap<
fi.getSize());
list"
list);