废话不用说,直接给我代码,必须要能够用的,有注释就更好
解决方案 »
- JSP错误求助。。紧急。。
- 如何利用js控制<html:select>的某个/几个option被选中(用js控制)?
- 请教一个Hibernate数据库问题
- jsp菜鸟级问题,急,在线等
- 关于两个.jsp文件传递表单的问题,有关数据库知识急!急!急!~!~!~!~!~!~!
- servlet 链接数据库问题
- ***这个问题是什么引起的?这个错误是什么意思?****
- 为什么我关闭连接对象conn就出错呢?请大家看看我的代码!谢谢!
- 关于jsp和java的小问题!
- 描述一下我的工作场景,我能如何在这样的环境中出色发挥。
- 时间转换!紧急,帮小弟看下。
- 为什么会输出null?? servlet利用javabean向jsp传递数据
<input type="file" name="file" />
备注:form 中加上这段代码enctype="multipart/form-data"
<form action="" name="" enctype="multipart/form-data">
</form>
大哥,给点敬业精神嘛,既然要实现jsp文件上传功能,至少需要两个jsp文件吧,一个文件用来选择文件,另一个文件用来处理接收文件。另外我要完整的代码,只要能运行成功就给分了
处理表单不是须要在action中处理吗
<form action="" name="" enctype="multipart/form-data">
<input type="file" name="uf" />
</form>action中 private File uf;
private String contentType;
private String fileName;
public void setUf(File uf){
this.uf = uf;
}
public void setUfContentType(String contentType){
this.contentType = contentType;
}
public void setUfFileName(String fileName){
this.fileName = fileName;
}
private void uploadFile(int trainId) throws Exception
{
String targetDirectory = scontext.getRealPath("/upload");
log.debug("targetDirectory=="+targetDirectory); TrainAttachVO taVO ;
String newFileName = "";
//如果没有附件,返回
if(this.uf == null)
return;
for (int i = 0; i < this.uf.length; i++)
{
newFileName = FileUtil.makeFileName(fileName[i]);
taVO = new TrainAttachVO();
taVO.setTrain_id(trainId);
taVO.setSeq(i+1);
taVO.setFile_nm(fileName[i]);
taVO.setFile_nm_s(newFileName);
taVO.setFile_type(contentType[i]);
//taVO.setFile_size(uf[i].length());
log.debug("contentType[i]=="+contentType[i]);
//增加一条附件记录
taService.create(taVO);
//得到上传目录和文件名
File target = new File(targetDirectory, newFileName);
log.debug("target=="+target);
System.out.println("path=="+target.getPath());
FileUtils.copyFile(uf[i], target);
}
}
那些 对vo的处理直接删掉就行
上面那段代码怎么用?是做为一个类来用吗?那个structs2什么的,我没有学过,我只会用jsp,一个jsp选择要发送的文件,另一个jsp处理接受文件所以如果可以的话,最好还是给我两个jsp文件吧
username: <input type="text" name="username"><br>
file: <input type="file" name="file"><br>
file2: <input type="file" name="file2"><br>
<input type="submit" value="submit">
</form>
后台servlet:
public class UploadServlet extends HttpServlet
{
@SuppressWarnings( {"unchecked", "deprecation"})
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
DiskFileItemFactory factory = new DiskFileItemFactory();
String path = req.getRealPath("/upload");
factory.setRepository(new File(path));
factory.setSizeThreshold(1024 * 1024);
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List<FileItem> list = (List<FileItem>)upload.parseRequest(req);
for (FileItem item : list)
{
String name = item.getFieldName();
if (item.isFormField())
{
String value = item.getString();
System.out.println(name + "=" + value);
req.setAttribute(name, value);
}
else
{
String value = item.getName();
int start = value.lastIndexOf("\\");
String fileName = value.substring(start + 1);
req.setAttribute(name, fileName);
item.write(new File(path, fileName));
//
// OutputStream os = new FileOutputStream(new File(path, fileName));
//
// InputStream is = item.getInputStream();
//
// byte[] buffer = new byte[400];
//
// int length = 0;
//
// while((length = is.read(buffer)) != -1)
// {
// os.write(buffer, 0, length);
// }
//
// is.close();
// os.close();
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
}
}
大哥,您的代码很明显不完整,DiskFileItemFactory这是什么东西啊再说我只想用两个jsp文件来实现这个功能,这两个jsp文件有这么难写吗?
学校里教的不都是用jsp来处理action的吗企业里就不知道了,反正在学校我就只会这种处理方式
但你的代码不完整,DiskFileItemFactory,ServletFileUpload这两个类是在哪里定义的?
se里面没有,ee里面也没有,不相信可以去查文档再说真的有的话Eclipse怎么可能会报错
和 commons-io-2.0.1.jar 上传的东西是在服务器端的
这样做太麻烦了,我只希望用两个jsp文件就能解决问题求大神快出现,救我于水深火热之中吧
import java.io.*;
import javax.servlet.http.*;
public class UpFile{
HttpServletRequest request;
HttpSession session;
String upFileMessage="";
public void setRequest( HttpServletRequest request){
this.request=request;
}
public void setSession( HttpSession session){
this.session=session;
}
public String getUpFileMessage(){
String fileName=null;
try{String tempFileName=(String)session.getId();
File f1=new File("C:/2011xinxi/download",tempFileName);
FileOutputStream o=new FileOutputStream(f1);
InputStream in=request.getInputStream();
byte b[]=new byte[10000];
int n;
while((n=in.read(b))!=-1){
o.write(b,0,n);
}
o.close();
in.close();
RandomAccessFile random =new RandomAccessFile(f1,"r");
int second=1;
String secondLine=null;
while(second<=2){
secondLine=random.readLine();
second++;
}
int position=secondLine.lastIndexOf('\\');
fileName=secondLine.substring(position+1,secondLine.length()-1);
byte cc[]=fileName.getBytes("ISO-8859-1");
fileName=new String(cc);
session.setAttribute("Name",fileName);
random.seek(0);
long forthEndPosition=0;
int forth=1;
while((n=random.readByte())!=-1&&forth<=4){
if(n=='\n'){
forthEndPosition=random.getFilePointer();
forth++;
}
}
File f2=new File("C:/2011xinxi/download",fileName);
RandomAccessFile random2 =new RandomAccessFile(f2,"rw");
random.seek(random.length());
long endPosition=random.getFilePointer();
long = endPosition;
int j=1;
while((>=0)&&(j<=6))
{--;
random.seek();
n= random.readByte();
if(n=='\n'){
endPosition=random.getFilePointer();
j++;
}
}
random.seek(forthEndPosition);
long startPoint=random.getFilePointer();
while(startPoint<endPosition-1){
n=random.readByte();
random2.write(n);
startPoint=random.getFilePointer();
}
random2.close();
random.close();
f1.delete();
upFileMessage=fileName+" Successfully Upload";
return upFileMessage;
}
catch( Exception exp){
if(fileName!=null){ upFileMessage=fileName+"Fail to Upload";
return upFileMessage;}
else{upFileMessage="";
return upFileMessage;
}
}
}}我刚做的实验
<html>
<body>
<p>选择要上传的文件:<br>
<form action="accept.jsp" method="post" enctype="multipart/form-data">
<input type="FILE" name="boy" size="38">
<br><input type="submit" name="g" value="提交">
</form>
</body>
</html>
accept.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<body>
<%
try {
InputStream in = request.getInputStream();
File dir = new File("C:/1000");
dir.mkdir();
File f = new File(dir, "B.txt");
FileOutputStream o = new FileOutputStream(f);
byte[] b = new byte[1000];
int n;
while ((n = in.read(b)) != -1)
o.write(b, 0, n);
o.close();
in.close();
out.print("文件已上传");
} catch (IOException ee) {
out.print("上传失败" + ee);
}
%></body>
</html>照书上打的 ,上传上去的文件在文本里没显示、、、、
终于有人给我想要的东西了,不过貌似程序运行结果有问题,上传后txt里面的内容不是上传前的txt内容了,请问这是怎么回事?能不能麻烦你再提供一个结果正确的程序
好吧,这么跟你说吧,其实我不会用servlet,我只希望用两个jsp文件来实现这个功能,这个要求不过分吧
比方说我原先上传的文件的内容是hello,world
上传后的文件的内容是-----------------------------7dc2ee10201fa
Content-Disposition: form-data; name="boy"; filename="C:\Documents and Settings\zjf\桌面\1.txt"
Content-Type: text/plainhello,world
-----------------------------7dc2ee10201fa
Content-Disposition: form-data; name="g"提交
-----------------------------7dc2ee10201fa--
为什么会多出好几行东西呢?
此控件是基于标准HTTP协议实现的文件上传功能。优势是扩展性非常好,整合简单,支持批量上传文件和上传文件夹功能,适合各种简单WEB项目。
另外一个特点是支持自动上传指定的本地文件。单文件上传演示上传本地文件代码
使用步骤如下:
1.调用AddFile函数添加本地文件,注意路径需要使用双斜框(\\)
2.调用PostFirst函数开始上传文件。<script type="text/javascript" language="javascript">
var uploaderMgr = new HttpUploaderMgr();
uploaderMgr.Load();//加载控件 window.onload = function()
{
uploaderMgr.Init();//初始化控件
//添加一个本地文件
uploaderMgr.AddFile("D:\\Soft\\QQ2010.exe");
uploaderMgr.PostFirst(); };
</script>
单文件整合代码: 服务器返回消息:<input id="txtFilePath" type="text" size="50" />
<script type="text/javascript" language="javascript">
var uploaderMgr = new HttpUploaderSingleMgr();
uploaderMgr.Config["PostUrl"] = "http://localhost:8080/asp.net/upload.aspx";
uploaderMgr.Load();
//文件上传完成后执行的回调函数
uploaderMgr.CompleteHook = function(msg)
{
document.getElementById("txtFilePath").value = msg;
}; window.onload = function()
{
uploaderMgr.Init();
};
</script>示例下载:
CAB安装包
开发文档
ASP示例
ASP.NET示例
JSP示例
PHP示例
难道程序员的工作就是复制+粘贴吗?难怪现在码工这么多而且我的要求也不怎么过分吧,只是要两个jsp文件而已两个文件加起来我看也不会超过100行吧,怎么就没有人写一个出来呢?还是求高手给个能用的jsp程序
<%@ page contentType="text/html;charset="UTF-8"%>
<html>
<title><%= application.getServerInfo() %></title>
<body><form action="doUpload.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" size="50">
<input type="submit" value="提交">
</form>
</body>
</html>
doUpload.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<html><head><title>upFile</title></head>
<body bgcolor="#ffffff">
<%
//定义上载文件的最大字节
int MAX_SIZE = 102400 * 102400;
// 创建根路径的保存变量
String rootPath;
//声明文件读入类
DataInputStream in = null;
FileOutputStream fileOut = null;
//取得客户端的网络地址
String remoteAddr = request.getRemoteAddr();
//获得服务器的名字
String serverName = request.getServerName();//取得互联网程序的绝对地址
String realPath = request.getRealPath(serverName);
realPath = realPath.substring(0,realPath.lastIndexOf("\\"));
//创建文件的保存目录
rootPath = realPath + "\\upload\\";
//取得客户端上传的数据类型
String contentType = request.getContentType();
try{
if(contentType.indexOf("multipart/form-data") >= 0){
//读入上传的数据
in = new DataInputStream(request.getInputStream());
int formDataLength = request.getContentLength();
if(formDataLength > MAX_SIZE){
out.println("<P>上传的文件字节数不可以超过" + MAX_SIZE + "</p>");
return;
}
//保存上传文件的数据
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
//上传的数据保存在byte数组
while(totalBytesRead < formDataLength){
byteRead = in.read(dataBytes,totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}
//根据byte数组创建字符串
String file = new String(dataBytes);
//out.println(file);
//取得上传的数据的文件名
String saveFile = file.substring(file.indexOf("filename=\"") + 10);
saveFile = saveFile.substring(0,saveFile.indexOf("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
//取得数据的分隔字符串
String boundary = contentType.substring(lastIndex + 1,contentType.length());
//创建保存路径的文件名
String fileName = rootPath + saveFile;
//out.print(fileName);
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
pos = file.indexOf("\n",pos) + 1;
int boundaryLocation = file.indexOf(boundary,pos) - 4;
//out.println(boundaryLocation);
//取得文件数据的开始的位置
int startPos = ((file.substring(0,pos)).getBytes()).length;
//out.println(startPos);
//取得文件数据的结束的位置
int endPos = ((file.substring(0,boundaryLocation)).getBytes()).length;
//out.println(endPos);
//检查上载文件是否存在
File checkFile = new File(fileName);
if(checkFile.exists()){
out.println("<p>" + saveFile + "文件已经存在.</p>");
}
//检查上载文件的目录是否存在
File fileDir = new File(rootPath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//创建文件的写出类
fileOut = new FileOutputStream(fileName);
//保存文件的数据
fileOut.write(dataBytes,startPos,(endPos - startPos));
fileOut.close();
out.println(saveFile + "文件成功上载.</p>");
}else{
String content = request.getContentType();
out.println("<p>上传的数据类型不是multipart/form-data</p>");
}
}catch(Exception ex){
throw new ServletException(ex.getMessage());
}
%>
</body>
</html>
运行方法,将这两个JSP文件放在同一路径下,运行UploadExample.jsp即可。
40楼是可以的,
文件被上传到:tomcat下\\webapps\\你的项目名\\upload文件夹中
但是我用的是Eclipse建立的工程,项目名是album,但貌似tomcat\webapps\album\upload这个文件夹压根不存在,而且连tomcat\webapps\album这个文件夹也不存在,太奇怪了有谁知道如果是用Eclipse运行的话,文件被上传到哪里去了呢?
里面有去掉多余行的代码,不过有点复杂