上传、下载、国际化

本文详细介绍了在Java Web环境中实现文件上传、下载及国际化处理的步骤。上传时需注意表单设置,依赖于commons-fileupload和commons-io库;下载则通过GET请求和特定链接完成;国际化涉及对不同地区用户的语言支持,通过Servlet和资源文件实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上传、下载、国际化

一、上传

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.jarx.x为版本号)

2.2 commons-io-x.x.jarx.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值”)获取数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值