开发文件上传下载所遇到的问题

问题1:

使用common fileupload上传多文件成功保存后,跳转到现实上传成功页面显示中文乱码,并且使用Ajax技术的上传进度条不运动;

问题解决:

1.

更改jsp页面编码方式UTF-8到GBK或GB2312

2.

FileItemFactory factory = new DiskFileItemFactory();   

ServletFileUpload upload = new ServletFileUpload(factory);   

/**  

 * 解决上传中文名的文件会出现乱码问题  

 */  

upload.setHeaderEncoding("UTF-8");   

问题2:由于我上传的表单包括文件项和普通表单项,所以需要获取普通表单项的值。

问题解决:

1.

String uploadBoardName = item.getString();//获得普通表单域的值

如果出现中文乱码用下面

String uploadBoardName= new String(item.getString().getBytes("iso-8859-1"),"UTF-8");

也可以String uploadBoardName=item.getString("UTF-8");
如果有多个普通域,则使用以下方式处理

if("uploadBoardName".equals(item.getName()){
     String uploadBoardName= item.getString();
      }
      if("descript".equals(item.getName()){
String descript = item.getString();
      }

2.

 if (item.isFormField())
            {
                String content = item.getString("UTF-8");
                String uploadBoardName= item.getFieldName();
                request.setAttribute(uploadBoardName,content);                   
            }
else{

......

String uploadBoardName= item.getFieldName();
request.setAttribute(uploadBoardName, fileName);

}

 

取值 request.getAttribute("uploadBoardName")

问题3:

在处理上传文件的servlet文件中,获取上传文件的jsp页面传过来的普通表单字段

使用getFieldName方法 ,得到是空。

问题解决:

在上传页面的select的属性中只设置了ID属性,没设置Name属性。在这里,要再次恶补下html的基本知识。

 问题4:

由于上传的资源使用三级栏目管理,所以,在接收由jsp上传页面传递过来的最高级栏目中文名称,并使用它进行查询第二级栏目的名称时,出现不能查询的情况,

DB_UploadBoard dbUploadBoard=new DB_UploadBoard();

UplaodBoard uploadBoard=new UplaodBoard();

Iterator it=dbUploadBoard.getUploadBoardFromTUBName("topUploadBoardName");

while(it.hasnext()){

uploadBoard=(uploadBoard)it.next();

out.println("<name>uploadBoard.getUploadBoardName()</name>");

}

在这里uploadBoard.getUploadBoardName()取到的值为第一级栏目的名称,而不是我想要的第一级栏目下的第二级栏目的所有名称。

原因:由于乱码原因,在

Iterator it=dbUploadBoard.getUploadBoardFromTUBName("topUploadBoardName");中取不到想要的值,所以我们可以改变在操作数据库查询之前的编码方式,或者下面有一种比较简单的方法,那就是

  //数据库操作
        String sql = "select * from uploadboard where topUploadBoardName='" + topUploadBoardName + "'";
        try {
            DBConnect dbconnect = new DBConnect(sql);
            dbconnect.excuteQuery();
            while (dbconnect.next()) {
                out.println("<name>" + dbconnect.getString("uploadBoardName")+ "</name>");
            }
        }

这样就可以解决了。

问题5:Ajax 读取服务器返回的XML出现中文乱码

问题解决:

在Servlet中设置

response.setcontenttype( "text/xml;charset=utf-8 ");
response.setheader( "cache-control ",  "no-cache ");
response.setcharacterencoding( "utf-8 ");
printwriter   out=  response.getwriter();

注意他们的设置的顺序。。。。。
printwriter   out=  response.getwriter(); 不然结果还是乱码,不要怪我不告诉是你!!!!

这一句必须在在最后设置,这既是要注意输出流的格式设置问题。我这里都是用的是UTF-8编码方式。

问题5:

想在网页显示上空出多个空格

问题解决:

<pre style="display:inline">这里是空位,这里<pre>和</pre>的距离有多少就有多少的空位</pre>

 

问题6:

实现普通表单值的传递,以保存到数据库的问题。在我的上传页面,有两个关联的下拉框,他们分别是最顶层栏目和第二层栏目,实现把文件上传到数据库中进行栏目管理。问题存在,保存到数据库的这两个栏目的值为空或是全部为空。

解决问题:

1,在不了解fileupload之前,先从数据库中取到所有的最高级的栏目的值,然后使用一个一个依次和getString("UTF-8")对比,如果相等,则赋值个最高栏目的变量topName.然后使用Break跳出本次的while(it.hasNext())的循环.然后使用取到的topName到数据库取到所有的他的上级市topName的第二季栏目的名称,再次循环直到取到第二级栏目的名称为止,最后保存在变量name中。

2,这也是最简单的办法,使用Item.getFileName(),具体如下所示:其中uploadBoardName和topUplaodBoardName分别是上传文件页面的两个栏目名称;

if(item.isFormField()){
 // 当判断 item 为 Form 域时,

   String fieldName = item.getFieldName();
   String value = item.getString();
  
   if(fieldName != null && fieldName.equals("topUploadBoardName")){
    topUplaodBoardName=value;
   }
   if(fieldName != null && fieldName.equals("uploadBoardName")){
    uploadBoardName=value;
   }

问题7:把上传的文件的路径等信息保存在数据库中,出现了F:
ewsuildwebupload物联网内容.doc

F:ewsuildwebupload第二讲 java语言基础 .ppt等等问题

知识点:

java中, "// "表示分隔,相当于在windows中的 "/ ',而Unix的是 "/ "

我发现,如果使用File.separator代替"/",可以获取到你想要的路径,不过如果把这个路径保存在数据库中,路径在数据库的显示是uildwebupload是这种情况,如果直接使用"/"就不会出现,所以又因为考虑到系统移植问题,所以数据库只保存web的相对路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值