虽然也是网络搜刮到的方法不过用起来感觉蛮简单,JS验证的方面就不说了 看看主要代码//源图片路径
String srcUrl1 = ""+Goods_url1+"";
//目标图片路径 String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg";
if (Goods_url1.equals(""))
{ }
else
{
try {
//生成读取图片到内存的输入流
FileInputStream finput = new FileInputStream(new File(srcUrl1));
//生成从内存将图片输出到磁盘的输出流
FileOutputStream foutput = new FileOutputStream(new File(tarUrl1));
BufferedOutputStream bos = new BufferedOutputStream(foutput);
int b ;
while(true) {
if(finput.available()<1024){
while((b=finput.read())!=-1){
bos.write(b);
}
break;
}else{
b=finput.read();
bos.write(b);
}
} finput.close();
bos.close();
foutput.close() ;
} catch (FileNotFoundException e) {
System.out.println(e); e.printStackTrace();
} catch (IOException e) {
System.out.println(e); e.printStackTrace();
}
-------------------------------------
提问高手们:本地上传图片,OK没问题,效率也可以(毕竟我在JS那里限制了只能传300KB的图片)
问题来了:放到FTP上以后
【//目标图片路径】
【String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg"; 】
ok 目标路径应该没问题,相对的FTP目录地址 可是FTP空间日志报错:
【java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at DAO.management_goodsurl.setmanagement_goodsurl(management_goodsurl.java:52)
at com.struts.action.Goods_TableActionAction.updategoods(Goods_TableActionAction.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
】
可以看到 我用struts框架做的 我在action里request的 input type=file 的 源文件路径 不能被找到
我认为程序放到FTP后,程序就在本机的 位置去查找 【C:\Documents and Settings\Administrator\桌面\77777777.jpg 】
而不是在我这里去查找这个路径
请问前辈们 我怎么改才好呢??? 之前有个前辈跟我说 我这样的方法只能实现本地上传 远程的只能用 组件实现。。我确实不想用组件。。求神求高手 小弟谢谢了
String srcUrl1 = ""+Goods_url1+"";
//目标图片路径 String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg";
if (Goods_url1.equals(""))
{ }
else
{
try {
//生成读取图片到内存的输入流
FileInputStream finput = new FileInputStream(new File(srcUrl1));
//生成从内存将图片输出到磁盘的输出流
FileOutputStream foutput = new FileOutputStream(new File(tarUrl1));
BufferedOutputStream bos = new BufferedOutputStream(foutput);
int b ;
while(true) {
if(finput.available()<1024){
while((b=finput.read())!=-1){
bos.write(b);
}
break;
}else{
b=finput.read();
bos.write(b);
}
} finput.close();
bos.close();
foutput.close() ;
} catch (FileNotFoundException e) {
System.out.println(e); e.printStackTrace();
} catch (IOException e) {
System.out.println(e); e.printStackTrace();
}
-------------------------------------
提问高手们:本地上传图片,OK没问题,效率也可以(毕竟我在JS那里限制了只能传300KB的图片)
问题来了:放到FTP上以后
【//目标图片路径】
【String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg"; 】
ok 目标路径应该没问题,相对的FTP目录地址 可是FTP空间日志报错:
【java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at DAO.management_goodsurl.setmanagement_goodsurl(management_goodsurl.java:52)
at com.struts.action.Goods_TableActionAction.updategoods(Goods_TableActionAction.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
】
可以看到 我用struts框架做的 我在action里request的 input type=file 的 源文件路径 不能被找到
我认为程序放到FTP后,程序就在本机的 位置去查找 【C:\Documents and Settings\Administrator\桌面\77777777.jpg 】
而不是在我这里去查找这个路径
请问前辈们 我怎么改才好呢??? 之前有个前辈跟我说 我这样的方法只能实现本地上传 远程的只能用 组件实现。。我确实不想用组件。。求神求高手 小弟谢谢了
推荐一种 带预览 容量 大小 限制的 简洁的上传组件好么 我用的struts框架
FileInputStream finput = new FileInputStream(new File(srcUrl1));
你直接从服务器读取 C:\Documents and Settings\Administrator\桌面\77777777.jpg 当然不行啦。首先你得接收从客户端传过去的文件流,然后再写入文件,这才叫上传,你那种写法叫本地拷贝。
你google一下struts文件上传 很多例子的