急!求java上传图片代码!
本人用ssh技术在做一个网站,需要后台管理新闻的软件上传图片,显示在前台页面上,新手,刚上任不久,请高手们指点!!小女子先谢了!
需要达到的效果:
1.上传的图片保存在发布的工程目录下,图片地址保存到数据库。
2.到数据库查询图片路径,显示图片。
代码被采用者大大的给分!!不要说用google...
[解决办法]
upload.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" %>
<html>
<head>
<title>上传文件 </title>
</head>
<body>
<form id="form1" name="msform" method="post" action="do_upload.jsp" enctype="multipart/form-data" onSubmit="return Check_Found(this);" target="iframe1">
<table width="50%" border="1" align="center">
<tr>
<td align="center"><input type="text" name="name" id="text1"></td>
</tr>
<tr>
<td align="center">产品说明:
<input type="file" name="file2" value=""/>
<iframe name="iframe1" style="display:none"> </iframe>
<input type="submit" name="Submit" value="上传图片" />
</td>
</tr>
</table>
</form>
</body>
</html>
do_upload.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" %>
<html>
<head>
<title>文件上传处理页面 </title>
</head>
<body>
<%
SmartUpload su=new SmartUpload();
su.initialize(pageContext);
su.upload();
String name;
int count=su.save("/upload",su.SAVE_VIRTUAL);
out.println(count+"个文件上传成功! <br>");
for(int i=0;i <su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file=su.getFiles().getFile(i);
if(file.isMissing()) continue;
String files=file.getFileName();
out.print("<script>window.parent.document.text1.value='../upload/"+file.getFileName()+"';</script>");
out.print("<script>alert('上传成功!');</script>");
response.setHeader("Refresh","0;URL=addnewproduce.jsp");
}
%>
</body>
</html>
还需要组件才行
[解决办法]
//<input type="file" id="upload" name="upload" style="width:100%"/>
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
/**
* @param args
* 文件字节输入、输出流方法拷贝一个文件到指定目录
*/
void copy(File f1, File f2) {//f1 源文件路径 f2目标路径 最后把f2 insert 到数据库就不写了
try {
// 建立相关的字节输入流
FileInputStream fr = new FileInputStream(f1); // 通过打开一个到实际文件的连接来创建一个
// FileInputStream,该文件通过文件系统中的路径名
// 创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream fw = new FileOutputStream(f2);
byte buffer[] = new byte[1]; // 声明一个byte型的数组,数组的大小是512个字节
while (fr.read(buffer) != -1) { // read()从此输入流中读取一个数据字节,只要读取的结果不!=-1就执行while循环中的语句块
fw.write(buffer); //write(byte[] b)将 b.length 个字节从指定字节数组写入此文件输出流中。
}
fw.close();// 关闭此文件输出流并释放与此流有关的所有系统资源。
fr.close();
System.out.println("文件" + f1.getName() + "里的内容已拷贝到文件"
+ f2.getName() + "中!");
} catch (IOException ioe) {
System.out.println(ioe);
} catch (Exception e) {
System.out.println(e);
}
}
/*
* 拷贝前的判断 f1该文件通过文件系统中的路径名 f2新的文件通过文件系统中的路径名 fs是新的文件名称
*/
public void bcopy(File f1, File f2) {
if (f1.exists()) {
// 判断要拷贝的文件是否存在
if (!f2.exists()) {//判f2是否存在
f2.mkdirs();// 建立相应的目录
}
copy(f1,f2);//调用copy方法
System.out.println("上传文件相关的信息:(名字,路径,大小,最后修改的时间是:)");
getinfo(f1);
getinfo(f2);
System.out.println("上传成功后文件相关的信息:(名字,路径,大小,最后修改的时间是:)");
} else {
System.out.println("要拷贝的文件不存在!");
}
}
//获取文件的一些信息
private void getinfo(File f1) {
// TODO Auto-generated method stub
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
if (f1.isFile()) {//isFile()方法是测试此抽象路径名表示的文件是否是一个标准文件。
System.out.println("文件名称:" + f1.getName());
System.out.println("文件路径:" + f1.getAbsolutePath());
System.out.println("文件大小:" + f1.length()+"字节(byte)");
System.out.println("最后修改的时间是:" + sdf.format(new Date(f1.lastModified())));
} else {
System.out.println("上传成功后获取服务器的相关信息:");
System.out.println("目录名称:" + f1.getName());
System.out.println("文件路径:" + f1.getAbsolutePath());
File[] files = f1.listFiles();
System.out.println("此目录中有" + files.length + "个文件!");
}
System.out.println("_______________________________");
}
public class Test_Servlet extends HttpServlet{
//.............
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String img = request.getParameter("upload"):
Test tt= new Test();
File f1, f2;
f1 = new File(img);
f2 = new File("E:/.../.../*.gif");//创建新的目录名称,服务器存放文件的目录
fc.bcopy(f1, f2);
} catch(Throwable e ) {
e.printStackTrace(System.err);
System.err.flush();
} // end try
}
//具体你在调试吧 , 存储到文件服务器应该随机起名-> sdf 这个变量你想想吧
[解决办法]
在这提点个人意见,你不觉得图片放在项目目录里不好吗,以前图片越来越多,项目的目录也越来越大,多不好,还不如放在服务器的某个位置
(如:D:\UpLoad下),这样你也不需要把图片的路径保存在数据库里,只需要把图片的名字保存在数据库里就行了
只是个人意思,随便说下
[解决办法]
upload.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" %>
<html>
<head>
<title>上传文件 </title>
</head>
<body>
<form id="form1" name="msform" method="post" action="do_upload.jsp" enctype="multipart/form-data" onSubmit="return Check_Found(this);" target="iframe1">
<table width="50%" border="1" align="center">
<tr>
<td align="center"> <input type="text" name="name" id="text1"> </td>
</tr>
<tr>
<td align="center">产品说明:
<input type="file" name="file2" value=""/>
<iframe name="iframe1" style="display:none"> </iframe>
<input type="submit" name="Submit" value="上传图片" />
</td>
</tr>
</table>
</form>
</body>
</html>
do_upload.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" %>
<html>
<head>
<title>文件上传处理页面 </title>
</head>
<body>
<%
SmartUpload su=new SmartUpload();
su.initialize(pageContext);
su.upload();
String name;
int count=su.save("/upload",su.SAVE_VIRTUAL);
out.println(count+"个文件上传成功! <br>");
for(int i=0;i <su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file=su.getFiles().getFile(i);
if(file.isMissing()) continue;
String files=file.getFileName();
out.print(" <script>window.parent.document.text1.value='../upload/"+file.getFileName()+"'; </script>");
out.print(" <script>alert('上传成功!'); </script>");
response.setHeader("Refresh","0;URL=addnewproduce.jsp");
}
%>
</body>
</html>
在这提点个人意见,你不觉得图片放在项目目录里不好吗,以前图片越来越多,项目的目录也越来越大,多不好,还不如放在服务器的某个位置
(如:D:\UpLoad下),这样你也不需要把图片的路径保存在数据库里,只需要把图片的名字保存在数据库里就行了
只是个人意思,随便说下
[解决办法]
这种可以用js编写
[解决办法]
新闻系统的 上传 不如去用HTML 文本编辑器吧
比如像fckeditor 里面带上传的 而且直接传到服务器上 挺不错
我就是这么做的
[解决办法]
给你个简单的,不过这个也是我从老师那里学习来的!
上传JSP页面
<body>
<form action="test.do?method=execute4" method="post" enctype="multipart/form-data">
<tr><td>名字 : <input type="text" id="name" name="name"/></td></tr><br>
<tr><td>文件 : <input type="file" name="file"/></td></tr><br>
<input type="submit" value="load...."/>
</form>
</body>
在action里写你自己的方法名,但是enctype属性一定要有!
action里
UploadForm upload = (UploadForm)form;
String filename = upload.getName();
String filepath = "D:/Upload\\";
if(!new File(filepath).isDirectory()){
new File(filepath).mkdir();
}
int length=upload.getFile().getFileName().split("\\.").length;
String file_hz=upload.getFile().getFileName().split("\\.")[length-1];
StringBuilder sb = new StringBuilder();
String file_name = sb.append(filepath).append(filename).append (".").append (file_hz).toString();
FileOutputStream out;
try {
out = new FileOutputStream(new File(file_name));
out.write(upload.getFile().getFileData());
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
form是这样的
public class UploadForm extends ActionForm{
private FormFile file;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
}
记的在struts里配置这个form哦
这样执行完就可以在D盘的upload里看到你要传的东西了,至于显示的话
<img src="">在src中写你从数据库里查到的路径,至于保存到数据库和查找就不嗦了!