上传、下载、国际化
一、上传
1.需要注意的:
1.1 表单的method属性应该为post方法,不能用get方法
1.2 表单enctype属性应该设为multipart/from-data
1.3 表单action属性应该设为请求的servlet的路径
1.4 一次性上传多个文件需要多个name不同的“<input type=”file”>”
2.依赖的库
2.1 commons-fileupload.x.x.jar(x.x为版本号)
2.2 commons-io-x.x.jar(x.x为版本号)
3.代码
3.1 html代码
<!--
上传文件的两个条件,1.必须是post请求 2.enctype="multipart/form-data""
注意:在servlet中使用request.getParameter(“userName”)无法获取到值
-->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="text" name="txt" /><br/>
<input type="file" name="myfile" /><br/>
<input type="file" name="myfile1" /><br/>
<input type="submit" value="立即上传"/>
</form>
3.2 java代码
boolean bool = ServletFileUpload.isMultipartContent(request);
//检查是否有文件上传请求
if(bool){
//创建解析文件上传的工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
//用于从请求中解析文件
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
try {
//解析是文本输入还是文件
List<FileItem> itmes = upload.parseRequest(request);
for (FileItem fi : itmes) {
//标识是文本输入
if(fi.isFormField()){
System.out.println(fi.getFieldName()+"----"+fi.getString());
}else{
//取文件名
String fileName = fi.getName();
//取流
InputStream is = fi.getInputStream();
String destPath=SAVE_DIR+"/"+fileName;
System.out.println(destPath);
FileOutputStream fs = new FileOutputStream(destPath);
byte[] bt = new byte[1024];
int num=-1;
while((num=is.read(bt))!=-1){
fs.write(bt, 0, num);
}
fs.flush();
fs.close();
is.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
二、下载
1.需要注意的:
1.1 表单的method属性最好为为get方法
2.html代码
<a href=”请求下载的serlvet地址”>下载</a>
3.java代码
static String SAVE_DIR = "E:/sc";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//文件下载输出流
OutputStream os = response.getOutputStream();
String fileName="1.jpg";
if(request.getParameter("fileName")!=null){
fileName=request.getParameter("fileName");
}
//告诉浏览器下载的名字
response.setHeader("Location",URLEncoder.encode(fileName,"utf-8"));
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName,"utf-8"));
//将文件的流写入outputstream
FileInputStream fis = new FileInputStream(SAVE_DIR+"/"+fileName);
//设置长度为文件长度,一次读完
byte [] bt = new byte[fis.available()];
fis.read(bt);
os.write(bt);
fis.close();
os.close();
}
三.国际化
一:所谓国际化就是一个网站提供了不同版本的语言,根据访问者的语言或国籍,显示给该用户该国家的语言。
二:区域设置(locale):这是一个特殊的文化或地理区域。它通常指语言符号后跟一个下划线和一个国家符号。例如 “en_US” 表示针对 US 的英语区域设置
三:servlet国际化
Servlet 可以根据请求者的区域设置拾取相应版本的网站,并根据当地的语言、文化和需求提供相应的网站版本。以下是 request 对象中返回 Locale 对象的方法。
java.util.Locale request.getLocale()
重要的区域设置方法,您可以使用它们来检测请求者的地理位置、语言和区域设置。
//根据区域设置获取当地时间
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.SHORT,
locale).format(new Date( ));
完全依赖java国际化 步骤如下
1.定义资源文件 BASENAME_语言代码_国家码.properties
2.通过request.getLocale() 获取Locale对象
3.通过ResourceBundle resb1 = ResourceBundle.getBundle(" BASENAME ", request.getLocale());
4.通过resb1.getString(“key值”)获取数据