求教:---jsp+struts--- 动态多文件上传中,特定文件类型。本机既是服务器又是客户端时可以,利用别的机子登陆,小的文件(不到1M)能传过去,大的不行

sdut_akaliusi202 2009-12-11 06:58:44
昨天在 crazylaa 和 红尘烟雨 的耐心解答下,获益匪浅,在这再次向他们进行感谢。
求教:小弟做的一个上传模块,读取特定类型的文件,上传至服务器。本机既是服务器又是客户端时,相应的上传功能可以实现。但是当用另外一台机器进行访问时,文件大小比较小的可以上传,文件稍大一些的上传不了。不知道为什么。
我做这块时的思路是这样的,根据解析文件获得的该文件中所有文件的的路径。前台jsp页面用客户端脚本读取这些路径对应的文件内容(脚本读文件路径返回的文件内容是string类型的),把这些内容放置到<input type="hidden"name ="filecontent">的同名标签中。该页面对应的FormBean中定义一个string[] filecontent 数组来承接页面form中动态添加的那些input标签的内容(也就是文件内容转移到这FormBean的这个数组中)。后台对应的Action中读取这个数组,循环将数组内容封装到流里面 ,然后写文件。
对应的关键部分的代码如下:
jsp页面部分
/**
*功能 :脚本读取要上传文件的内容(读取客户端文件);
*參數說明:filepath對應的是文件路徑名
*返回值 :FileContent是string類型的
*作者:
*/
function FileContentRead(filepath)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");//创建FileSystemObject对象,用来进行磁盘读写操作
getF = fso.OpenTextFile(filepath); //打开文件
FileContent=getF.Readall();//读取文件全部内容
getF.close();//关闭对象
return FileContent ;//获取文件内容
}
/**
*功能 :动态创建表单控件,将文件内容通过input hidden类型的标签value属性添加到表单中提交;
*參數說明:createElement()tagName标签名称,type类型,标签name值,value标签的value属性
* add()实现将创建的表单控件添加到form表单中,value传的是获取的上传文件的内容
*返回值 :
*作者:
*/
function createElement(tagName, type, name, value)
{
var element = null;
try
{
element = document.createElement('<' + tagName + ' name="'+name+'" />');
element.type = type;
element.value = value;
}
catch (e)
{
}
if ( ! element)
{
element = document.createElement(tagName);
element.setAttribute("type", type);
}
return element;
}

function add(value )
{
// 动态创建控件名称
var name = "fileContent";
var input1 = createElement("input", "hidden", name ,value);
var br = document.createElement("<br />");
var files = document.forms[0];
files.appendChild(br);
files.appendChild(input1);
// k ++ ;
}

FormBean部分
private String[] fileContent; //上传文件的内容; public String[] getFileContent() {
return fileContent;
}

public void setFileContent(String[] fileContent) {
this.fileContent = fileContent;
}
后台Action部分
public ActionForward fileUpLoad(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
BatchSoftappForm batchform = (BatchSoftappForm)form;
System.out.println("fileUpLoad");
// 上传文件的文件名和內容
String[] fileNm = batchform.getFileNmHid();
String[] fileCnt= batchform.getFileContent();
System.out.println("*******fileNm.length====="+fileNm.length);
System.out.println("-------fileCnt.length------"+fileCnt.length);
System.out.println("====ProjectName===="+batchform.getProjectName());

// 服务器的上传文件目录
String dir = this.getServlet().getServletContext().getRealPath("uploadfile")+"\\"+batchform.getProjectName()+"\\"+batchform.getCurrJobID();
dir=dir.toString();
System.out.println("新建服务器端文件保存路径==="+dir);
File mdkFile = new File(dir);
if(!mdkFile.exists()){
mdkFile.mkdirs();
}

// 上传文件
try
{
// 循环上传文件
for(int i=0;i<fileNm.length;i++)
{
System.out.println("文件名以及文件内容*************"+fileNm[i]+"==========="+fileCnt[i]);
// 输入输出流操作
BufferedReader br =new BufferedReader(new StringReader(fileCnt[i]));
FileWriter fw = new FileWriter(dir+"/"+fileNm[i]);
char[] chars= new char[2048];
int s = 0;
int success = 0;
while ((s = br.read(chars)) != -1) {
fw.write(chars, 0, s);
success++;
}
if (success == 0) {
throw new Exception("错误!");
}
fw.close();
br .close();
System.out.println(fileNm[i]+"上传成功");
}
System.out.println("文件上传完成"+"文件保存路径==="+dir);

}
catch(Exception e){
//e.getStackTrace();
e.getMessage();
}
return mapping.findForward("softapp");
}

本机既是服务器又是客户端时好使,用其他的机器访问时,文件大小不大的(不到1M)的好使,文件大小稍大点的(9M左右的不行)。在其他的机器上访问时,用httpwatch发现文件内容已经赋了过去。也就是说发送http post请求时 ,<input>标签中已经有文件内容了。
QQ :315780342
MSN :qincao315@live.cn





...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazylaa 2009-12-29
  • 打赏
  • 举报
回复
解决了把?
sdut_akaliusi202 2009-12-16
  • 打赏
  • 举报
回复
谢谢哥们

[Quote=引用 4 楼 zhanlang9075 的回复:]
等待高手正解 祝LZ好运
[/Quote]
zhanlang9075 2009-12-16
  • 打赏
  • 举报
回复

等待高手正解 祝LZ好运
sdut_akaliusi202 2009-12-16
  • 打赏
  • 举报
回复
您好,谢谢您的解答。我的是struts1.2的
这一块怎么设置那

[Quote=引用 1 楼 junshi_liu 的回复:]
这个应该是struts的配置问题。

如果用的是struts2的话,应该在struts.properties里边加一个struts.multipart.maxSize,或者在struts.xml头上加一个
<constant name="struts.multipart.maxSize" value="16777216"/>
[/Quote]
huosidun0302 2009-12-16
  • 打赏
  • 举报
回复
帮顶
junshi_liu 2009-12-16
  • 打赏
  • 举报
回复
这个应该是struts的配置问题。

如果用的是struts2的话,应该在struts.properties里边加一个struts.multipart.maxSize,或者在struts.xml头上加一个
<constant name="struts.multipart.maxSize" value="16777216"/>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧