,Servlet上传时,编码处理的问题,一个老问题,记下来警示自己和他人,
package com.hysoft.danbao;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
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;
import com.hysoft.utils.InsertFile;
public class UploadServlet extends HttpServlet {
//初始化条件
InputStream is=null;
String clmc=null;
String ysr=null;
String ysyj=null;
String cllj=null;
String uploadname=null;
String uploadname1=null;
int kehu_id=1;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart == true) {
//创建该对象
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
//解析request 请求,并返回FileItemIterator集合
Iterator<FileItem> itr = items.iterator();
while (itr.hasNext()) {
//从集合中获得一个文件流
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
String fieldName = item.getFieldName();
if ("clmc".equals(fieldName)) {
clmc=new String(item.getString().getBytes("iso-8859-1"), "GBK");
}else if("ysr".equals(fieldName)){
ysr=new String(item.getString().getBytes("iso-8859-1"), "GBK");
}else if("ysyj".equals(fieldName)){
ysyj=new String(item.getString().getBytes("iso-8859-1"), "GBK");
}else if("kehu_id".equals(fieldName)){
kehu_id=Integer.parseInt(item.getString());
}
}
else {
uploadname=new String(item.getName().getBytes("iso-8859-1"), "GBK");
uploadname1=uploadname.substring(uploadname.lastIndexOf("."));
is=item.getInputStream();
}
}
} else {
System.out.println(" form error");
}
System.out.println(clmc);
System.out.println(ysr);
System.out.println(ysyj);
String realpath=request.getRealPath("/upload");
File uploaddir =new File(realpath);
if(!uploaddir.exists()){
uploaddir.mkdir();
}
String savename=UUID.randomUUID().toString()+uploadname1;
String savepath=realpath+ File.separator+savename;
cllj="upload/"+savename;
OutputStream out1 = new FileOutputStream(savepath);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) > 0) {
out1.write(buffer, 0, len);
}
out1.close();
is.close();
System.out.println(kehu_id);
System.out.println(cllj);
InsertFile.add(clmc,ysr,ysyj,cllj,kehu_id);
out.print("文件上传成功!<br/><br/>");
out.print("<input type='button' onclick='window.close();window.opener.location.reload();' value='关闭窗口'>");
}
}
- 大小: 16.4 KB
分享到:
相关推荐
《jQuery_file_upload-Servlet上传版本》是一个基于jQuery的文件上传解决方案,特别针对Servlet环境进行了优化,解决了在Java平台上常见的文件上传问题,如进度条显示和中文文件名编码问题。这个解决方案使得开发者...
首先,添加依赖到项目中,然后创建一个`ServletFileUpload`实例来解析请求: ```java import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org....
这个“servlet上传struts下载例子”是一个典型的使用这两种技术来解决中文文件名上传和下载问题的示例。下面将详细阐述相关知识点。 1. **Servlet**:Servlet是Java Servlet API规范定义的一组接口,用于扩展服务器...
SmartUpload是一个强大的文件上传组件,它可以方便地集成到基于Servlet的Java应用中。它的主要优点包括对文件大小、类型以及上传数量的控制,支持多文件同时上传,以及对非ASCII字符(如中文)的良好支持。 首先,...
根据提供的文件内容,我们可以了解到《Java Servlet 3.1规范》中文版详细地介绍了Servlet技术的基础知识、功能、以及与Java EE的关系。下面将对文件中的关键知识点进行详细说明: 1. Servlet简介 Servlet是一种运行...
1. **异步处理**:Servlet 3.1引入了异步Servlet,允许开发者在服务请求时启动一个异步操作,然后将控制权交还给容器,以便容器可以继续处理其他请求。这样,开发者可以在后台线程执行耗时的操作,如数据库查询或...
1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................
Java Servlet API 还包括其他接口和类,如GenericServlet,它是一个抽象类,实现了Servlet和ServletConfig接口,为开发Servlet提供了一个通用基础。此外,SingleThreadModel接口已经过时,它曾经用于控制Servlet实例...
本压缩包提供的“jsp+servlet 上传和下载包”是一个基本的文件操作组件,它包含了一些核心库,如Apache Commons IO和Commons FileUpload,以及可能的中文支持库jsmartcom_zh_CN.jar。以下是这些组件的详细说明: 1....
4. **文件上传乱码**:在处理文件上传时,乱码问题可能出现在文件名上。Apache Commons FileUpload库提供了设置字符编码的方法: ```java DiskFileItemFactory factory = new DiskFileItemFactory(); factory....
提供了更高效的文件上传机制,支持大文件和断点续传,同时简化了文件上传的错误处理。 10. **HTTP/2支持**: 虽然Servlet3.1规范本身并未直接支持HTTP/2协议,但为适配这一新协议打下了基础,后续的Servlet版本将...
`getSession()`创建或获取一个session,`getAttribute(String name)`和`setAttribute(String name, Object value)`用于存储和读取session数据。 10. **生命周期管理**: Servlet的生命周期由Servlet容器管理,包括...
在Java编程语言中,处理中文文件名的上传和下载是一个常见的需求,特别是在开发Web应用程序时。本主题将深入探讨如何在Java环境下实现这一功能,尤其是针对JSP(Java Server Pages)应用。首先,我们来看看标题提到...
Ajax通过JavaScript创建XMLHttpRequest对象来实现这一功能,而Servlet是Java Web应用中的一个组件,用于处理来自客户端的请求并返回响应。 在Ajax请求中发送汉字,需要关注字符编码问题。默认情况下,Ajax请求的...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
总之,`jspsmartupload`是一个强大的工具,可以帮助我们轻松实现文件上传功能,而通过恰当的编码设置和处理,我们可以确保在处理中文路径时不会出现乱码。这个Eclipse工程实例为我们提供了一个很好的实践平台,加深...
这是一个前后端分离的电子商城项目,项目采用Vue-cli和Mybatis+Servlet框架实现的。 功能: 用户的注册、登录,商品的分页显示和热门商品的筛选,商品的添加购物车和下单功能。 后台管理实现了商品的上架与下架,...
1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释 15 1.6.5 处理指令 15 1.6.6 空白处理 16 1.6.7 行尾处理 16 ...
在本例中,我们关注的是一个JSP文件上传的例子,其中遇到了一个问题:当用户尝试输入包含中文路径的文件进行上传时,显示出现问题。这个问题可能涉及到字符编码、路径处理以及与服务器之间的通信等多个方面。 首先...
`jspsmartupload.jar` 是一个专为Java Web开发设计的上传组件,它解决了在处理文件上传时可能出现的中文乱码问题。这个组件是许多Web应用程序中的重要工具,特别是那些需要用户上传包含中文字符的文件名或元数据的...