您的位置:首页 > 其它

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

2010-07-15 22:55 507 查看
问题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的相对路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: