求教:---jsp+struts--- 文件上传。10M的字符串要从页面提交到服务器,网络正常,应该怎么弄

sdut_akaliusi202 2009-12-11 08:27:40
求教:---jsp+struts1.2--- 文件上传----10M的字符串要从页面提交到服务器,网络正常,应该怎么弄
做的一个上传模块,读取特定类型的文件,上传至服务器。本机既是服务器又是客户端时,相应的上传功能可以实现。但是当用另外一台机器进行访问时,文件大小比较小的可以上传,文件稍大一些的上传不了。不知道为什么。
我做这块时的思路是这样的,根据解析文件获得的该文件中所有文件的的路径。前台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>标签中已经有文件内容了。
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazylaa 2009-12-29
  • 打赏
  • 举报
回复
jf
JavaAlpha 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wenzheng38 的回复:]
如果是上传文件的话,可以用个上传工具jspsmartupload
真的需要读取内容的话,使用缓存功能的StringBuffer,BufferedReader等
[/Quote]

缓存很重要的。

设置不好会出现问题的。可能会死掉tomcat的。

可以参考一下。

http://www.javaeye.com/topic/153816
JavaAlpha 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wenzheng38 的回复:]
如果是上传文件的话,可以用个上传工具jspsmartupload
真的需要读取内容的话,使用缓存功能的StringBuffer,BufferedReader等
[/Quote]

缓存很重要的。

设置不好会出现问题的。可能会死掉tomcat的。

可以参考一下。

http://www.javaeye.com/topic/153816
wondrain 2009-12-14
  • 打赏
  • 举报
回复
这得在配置文件中设置
silencexk212112 2009-12-12
  • 打赏
  • 举报
回复
学习...
yanm7788 2009-12-12
  • 打赏
  • 举报
回复
干嘛一定得自己写代码?可以直接ftp传些资料到服务器上
wenzheng38 2009-12-12
  • 打赏
  • 举报
回复
如果是上传文件的话,可以用个上传工具jspsmartupload
真的需要读取内容的话,使用缓存功能的StringBuffer,BufferedReader等
archko 2009-12-12
  • 打赏
  • 举报
回复
你只是把文件传到服务器吧.为什么要这样读取呢?当成流一样传过去啊
new_bird_0001 2009-12-12
  • 打赏
  • 举报
回复
直接上传一个文件不行吗?可以先编写一个文件上传的网页,然后用httpclient的类来实现文件上传(搜索一下一堆代码)。
sdut_akaliusi202 2009-12-12
  • 打赏
  • 举报
回复
您好,能不能说的具体点
[Quote=引用 1 楼 archko 的回复:]
你只是把文件传到服务器吧.为什么要这样读取呢?当成流一样传过去啊
[/Quote]

67,512

社区成员

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

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