jsp smartupload如何上传固定位置文件到服务器
我想用smartupload上传本地c盘中的内容到服务器,可是该组建好像是只有用表单提交的方式才能获取到要上传的文件位置,我怎么能够不用表单提交,直接上传磁盘的内容到服务...
我想用smartupload上传本地c盘中的内容到服务器,可是该组建好像是只有用表单提交的方式才能获取到要上传的文件位置,我怎么能够不用表单提交,直接上传磁盘的内容到服务器呢?
高手进,急!!!! 展开
高手进,急!!!! 展开
3个回答
展开全部
你虽然问得很简单,但是做过相关项目的人都是知道这个问题比较复杂,为什么一定要用form表单上传,这是因为文件上传必须要通过以下步骤。
1、客户端和服务器建立连接。
2、客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。
3、客户端按照符合“multipart/form-data”的格式向服务器端发送数据。
注意,客户端要向服务器发送的请求是“multipart/form-data””格式的数据,Multipart/form-data格式就是浏览器用表单提交数据的格式。
你不用表单如何实现这个格式?
如果不想用表单可以推荐你几种方法。
1、动态创建表单,这个方法不影响你的页面布局,可以通过弹出<div>嵌入<form>实现或者使用隐藏的<form>来实现。一般都推荐这个方法。
2、用ajaxFileUpload组件或其他组件,异步上传,原理也是动态创建表单。
1、客户端和服务器建立连接。
2、客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。
3、客户端按照符合“multipart/form-data”的格式向服务器端发送数据。
注意,客户端要向服务器发送的请求是“multipart/form-data””格式的数据,Multipart/form-data格式就是浏览器用表单提交数据的格式。
你不用表单如何实现这个格式?
如果不想用表单可以推荐你几种方法。
1、动态创建表单,这个方法不影响你的页面布局,可以通过弹出<div>嵌入<form>实现或者使用隐藏的<form>来实现。一般都推荐这个方法。
2、用ajaxFileUpload组件或其他组件,异步上传,原理也是动态创建表单。
追问
可问题是怎么写呀?能给点代码提示吗?嵌入的话里面有不让它写
这样的话参数该怎么写呢?
展开全部
这个并不是很难,你用struts2框架很简单的。
1、在后台写个action类,
public class FileUpLoadAction extends ActionSupport{
private String userId;
private File resume;
private String resumeFileName;
private String resumeContentType;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
Log.getLog().info("userId="+userId);
取得客户端的上传文件();
return "path";
}
void 取得客户端的上传文件(){
try {
//检查客户是否上传了文件
if(resume==null){
Log.getLog().info("客户端没有上传文件");
return ;
}
//建立读流的工具对象:fin,来源于客户端文件上传
FileInputStream fin=new FileInputStream(resume);
//建立写流的工具对象:fout,要写入应用服务器的某个硬盘目录
String outDir="D:\\";
String outFilePath=outDir+"/"+resumeFileName;
Log.getLog().info("上传文件大小,filesize="+resume.length());
Log.getLog().info("上传文件文件名,fileName="+resumeFileName);
FileOutputStream fout=new FileOutputStream(outFilePath);
//执行读、写操作
int len=10*1024; //10k的缓存区
byte[]buf=new byte[len];
int count; //用于每次读取文件的计数控制
while(true){
count=fin.read(buf);
if(count<0)
break;
fout.write(buf, 0, count);
}
//关闭操作
fin.close();
fout.flush();
fout.close();
Log.getLog().info("上传文件工作完成。。。");
} catch (Exception e) {
e.printStackTrace();
}
}
然后再写个.jsp页面
<s:fielderror></s:fielderror>
<s:form action="upload" enctype="multipart/form-data">
<s:textfield name="userId" label="姓名:"></s:textfield>
<s:file name="resume" label="个人信息:" size="80"></s:file>
<s:submit value="提交"></s:submit>
</s:form>
再配置下struts.xml,如果想上传大文件,需要加上
<constant name="struts.multipart.maxSize" value="100000000" />
1、在后台写个action类,
public class FileUpLoadAction extends ActionSupport{
private String userId;
private File resume;
private String resumeFileName;
private String resumeContentType;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
Log.getLog().info("userId="+userId);
取得客户端的上传文件();
return "path";
}
void 取得客户端的上传文件(){
try {
//检查客户是否上传了文件
if(resume==null){
Log.getLog().info("客户端没有上传文件");
return ;
}
//建立读流的工具对象:fin,来源于客户端文件上传
FileInputStream fin=new FileInputStream(resume);
//建立写流的工具对象:fout,要写入应用服务器的某个硬盘目录
String outDir="D:\\";
String outFilePath=outDir+"/"+resumeFileName;
Log.getLog().info("上传文件大小,filesize="+resume.length());
Log.getLog().info("上传文件文件名,fileName="+resumeFileName);
FileOutputStream fout=new FileOutputStream(outFilePath);
//执行读、写操作
int len=10*1024; //10k的缓存区
byte[]buf=new byte[len];
int count; //用于每次读取文件的计数控制
while(true){
count=fin.read(buf);
if(count<0)
break;
fout.write(buf, 0, count);
}
//关闭操作
fin.close();
fout.flush();
fout.close();
Log.getLog().info("上传文件工作完成。。。");
} catch (Exception e) {
e.printStackTrace();
}
}
然后再写个.jsp页面
<s:fielderror></s:fielderror>
<s:form action="upload" enctype="multipart/form-data">
<s:textfield name="userId" label="姓名:"></s:textfield>
<s:file name="resume" label="个人信息:" size="80"></s:file>
<s:submit value="提交"></s:submit>
</s:form>
再配置下struts.xml,如果想上传大文件,需要加上
<constant name="struts.multipart.maxSize" value="100000000" />
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么叫上传?得有人操作或者自动任务操作才行。
你的意思是不想选中文件,想直接点一个上传按钮就自动上传文件吧?
你的意思是不想选中文件,想直接点一个上传按钮就自动上传文件吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询