当前位置:首页 » 文件传输 » servlet上传大文件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

servlet上传大文件

发布时间: 2022-04-30 02:56:47

㈠ jsp+servlet 怎么实现文件上传

你要做文件上传吧 form表单里一定要设置这两个值enctype="multipart/form-data" method="post"
上传成功后会在tomcat里有那个文件 ,至于你说的要获取io流。那就需要找到那个文件给你写一下伪码吧:
//获得上传文件的路径

String path = getServletContext().getRealPath(webpath);

File file = new File(path);
file.getParentFile().mkdirs();
file.createNewFile();

// 获得流
InputStream in = item.getInputStream();
OutputStream out = new FileOutputStream(file);
不懂的再问我!
建议你用个上传组件,fileupload什么的

㈡ 点击JSP页面的链接,到一个用来上传大文件的servlet,上传过程中需要等待很长时间

建议参考《java web整合开发王者归来》 P78页有介绍,为页面添加隐藏的iframe,设置form的target为该iframe

㈢ java用org.apache.commons.fileupload.servlet.ServletFileUpload上传文件,限制上传文件大小。急在线等。

eclipse项目包含build文件夹,myeclipse没有这个文件夹,你在import的时候常规general下有4个选项,archive file,exists project,file system,prefrences(档案文件或压缩档案,现存项目,文件系统,首选项),一般完整项目使用第二个,但是如果别人上传的是文件,就使用文件系统导入,看看项目是什么工具做的,再根据具体情况导入

㈣ 怎样用servlet实现文件上传

编写上传页面,在WebContent目录下创建一个NewFile.jsp文件,并编写如下代码。注意: 必须加上 enctype="multipart/form-data" .表示以二进制的数据格式来传输。

开发处理文件上传的Servlet
1、使用注解@MultipartConfig将一个Servlet标识为支持文件上传。
2、Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。

将控制台打印的文件上传地址复制到地址栏。查看上传的文件,页面提示上传成功!

在编写servlet时,应该注意 必须注解 @MultipartConfig 将一个Servlet标识为支持文件上传,否则会导致上传失败。还有就是JSP页面上 form表单中 ,必须加上 enctype="multipart/form-data" .表示以二进制的数据格式来传输。

文件上传servlet类的代码编写。dopost()方法中的主要代码:(读者可参考注释自行进行编写,然后按照以上步骤进行测试)。
request.setCharacterEncoding("utf-8"); //获取文件部件part Part part=request.getPart("filename"); //获取服务器的路径 即上传路径 String root=request.getServletContext().getRealPath("/file"); //获取上传文件的头部信息 String headname=part.getHeader("content-disposition"); //获取文件后缀名 String ext = headname.substring(headname.lastIndexOf("."), headname.length()-1); // 上传目的地完整的路径 String filename=root+"/"+UUID.randomUUID().toString()+ext; System.out.println(filename); //导入文件 part.write(filename); request.setAttribute("info", "上传成功!"); request.getRequestDispatcher("/NewFile.jsp").forward(request, response); }

㈤ jsp+servlet实现文件上传问题

try{
//1.获得上传帮助类SmartUpload SmartUpload su = new SmartUpload();
//2.设置上传允许大小,以B为单位 su.setMaxFileSize(3*1024*1024);
//3.设置允许上传图片格式 su.setAllowedFilesList("jpg,gif,bmp");
//4.初始化
su.initialize(this.getServletConfig(), request, response);
//上传
su.upload();

//获取上传文件的入口,客户端会认为上传是一堆文件 Files files = su.getFiles();
//上传一个,从0开始
File file = files.getFile(0);
//上传文件的名字
String fileName = file.getFileName();
//上传文件的后缀名
String fileExt = file.getFileExt();
//上传文件的大小
int fileSize = file.getSize();

//获取页面提交的值,此处的request不再是HttpServletRequest,必须使用SmartUpload提供的request
Request myreq = su.getRequest();
String username = myreq.getParameter("username");
String password = myreq.getParameter("password");

//设置上传图片的路径地址
java.io.File truefile = new java.io.File(this.getServletContext().getRealPath("/image"));
//不存在则创建
if(!truefile.exists()){
truefile.mkdir();
}
//对图片进行重命名 String trueFileName = new UUIDGenerator().generate().toString()+"."+fileExt;
//最终路径/image/435454343.jpg
String finalPath = "/"+truefile.getName()+"/"+trueFileName;
file.saveAs(finalPath);

㈥ servlet怎么实现文件上传

//新建一个Smartupload对象
SmartUpload su=new SmartUpload();
//上传初始化
su.initialize(pageContext);
//设定上传限度
//1.限定每个上传文件的最大长度
//su.setMaxFileSize(100000);
//2.限制总上传数据的长度。
//su.setTotalMaxFileSize(20000);
//3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
//su.setAllowFilesList("doc,text");
//4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html扩展名的文件或没有扩展名的文件
//su.setDeniedDilesList("exe,bat,jsp,html,htm,,");
//上传文件
su.upload();
//将上传文件全部保存到指定目录
int count=su.save("/upload");
out.println(count+"个上传文件成功!<br>");
//利用Request对象获取参数之值
out.println("test="+su.getRequest().getParameter("test")+"<br><br>");
//逐一提取上传文件信息,同时可保存文件。
for(int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file=su.getFiles().getFile(i);
//若文件不存在则继续
if(file.isMissing())
continue;
//显示当前文件信息
out.println("<table border=1>");
out.println("<tr><td>表单项名(FiledName)</td><td>"+file.getFieldName()+"</tr></tr>");
out.println("<tr><td>文件长度(Size)</td><td>"+file.getSize()+"</td><td>");
out.println("<tr><td>文件名(FileName)</td><td>"+file.getFileName()+"</tr></tr>");
out.println("<tr><td>文件扩展名(FiledExt)</td><td>"+file.getFileExt()+"</tr></tr>");
out.println("<tr><td>文件全名(FiledPathName)</td><td>"+file.getFilePathName()+"</tr></tr>");
out.println("</table><br>");
//将文件另存
//file.saveAs("/upload/"+myFile.getFileName());
//另存到以web应用程序的根目录为文件根目录的目录下
//file.saveAs("/upload/"+myFile.getFileName(),su.SAVE_VIRTUAL);
//另存到操作系统的根目录为文件根目录的目录下
//file.safeAs("c://temp//"+myFile.getFileName(),su.SAVE_PHYSICAL);
}

上面就是了。。。。祝你好运哈!

㈦ java ftp上传5G以上大文件,怎么做

java上传可以使用common-fileupload上传组件的。common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件下面先介绍上传文件到服务器(多文件上传):import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;
public class upload extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节,这里设为2m
fu.setSizeMax(2*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("c:\\windows\\temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();//正则匹配,过滤路径取文件名
String regExp=".+\\\\(.+)$";//过滤掉的文件类型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result){
for (int temp=0;temp if (m.group(1).endsWith(errorType[temp])){
throw new IOException(name+": wrong type");
}
}
try{//保存上传的文件到指定的目录//在下文中上传文件至数据库时,将对这里改写
item.write(new File("d:\\" + m.group(1))); out.print(name+" "+size+"
");
}
catch(Exception e){
out.println(e);
} }
else
{
throw new IOException("fail to upload");
}
}
}
}
catch (IOException e){
out.println(e);
}
catch (FileUploadException e){
out.println(e);
}

}
}

㈧ servlet 文件上传 ,急急

你看看下面这个、
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("GBK");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>文件提示</TITLE></HEAD>");
out.println("<BODY>");
// 这里对request进行封装,RequestContext提供了对request多个访问方法
RequestContext requestContext = new ServletRequestContext(request);
// 判断表单是否是Multipart类型的
if (FileUpload.isMultipartContent(requestContext)) {
// 实例化一个硬盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓存区的大小
factory.setSizeThreshold(1024 * 1024);
// 设置目标临时文件夹
String temp=this.getServletContext().getRealPath("/") + "FileTemp";
// 设置目标文件夹路径
String path = this.getServletContext().getRealPath("/") + "File";
// 设置上传文件夹路径
factory.setRepository(new File(temp));
// 上传组件
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置文件上传的大小
upload.setFileSizeMax(3 * 1024 * 1024);
List<FileItem> fileList = null;
try {
// 获取文件列表
fileList = upload.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + 3 * 1024 * 1024 + "字节<p/>");
out
.println("<a href=\"/Fox/upload.jsp\" target=\"_top\">返回</a>");
return;
}
e.printStackTrace();
} // 得到所有上传文件
Iterator<FileItem> it = fileList.iterator();
while (it.hasNext()) {
// 得到系统时间
long now = System.currentTimeMillis();
// 将long类型转换为String类型
String prefix = String.valueOf(now);
FileItem fileItem = (FileItem) it.next();
// 得到文件的后缀
String postfix = fileItem.getName().substring(
fileItem.getName().lastIndexOf(".") + 1); // 保存文件,其实就是把缓存里的数据写到目标路径下
File newFile = new File(path + "/" + prefix + "." + postfix);
// 文件列表为空
if (fileItem.getName() == null || fileItem.getName() == "") {
out.println("请选择上传文件<p />");
out
.println("<a href=\"/Fox/upload.jsp\" target=\"_top\">返回</a>");
return;
}
try {
if (newFile.createNewFile())
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
out.println("文件上传成功. 已保存为: " + prefix + "." + postfix
+ " 文件大小:" + fileItem.getSize() + "字节<p />");
}
}
out.println("<a href=\"/Fox/upload.jsp\" target=\"_top\">继续上传</a>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}}
还有一种方式更简单、我也给你、用的是jspsmartupload、、、 public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("GBK");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>图片上传</TITLE></HEAD>");
out.println("<BODY>");
// 新建一个SmartUpload对象
SmartUpload smart = new SmartUpload();
// 上传初始化
smart.initialize(servletconfig, request, response);
try {
smart.upload();
} catch (SmartUploadException e) {
e.printStackTrace();
}
com.jspsmart.upload.File myFile = smart .getFiles().getFile(0);
// 得到系统时间
long now = System.currentTimeMillis();
// 将long类型转换为String类型
String filename = String.valueOf(now);
// 得到文件的后缀
String postfix = myFile .getFileExt(); //取得文件的大小
int file_size=myFile.getSize();
// 将上传文件全部保存到指定目录
try {
smart.getFiles().getFile(0).saveAs("/images/" + filename+postfix);
} catch (SmartUploadException e) {
e.printStackTrace();
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
} 写的有点乱、至于相关包的话、你就自己去找吧、应该能找到的、祝你好运、

㈨ servlet传文件到servlet

代码完全可用我已经实验成功,这个可很好的servlet之间传递数据

两个servlet传值你可以把下面的代码修改一下
简单示例的源码
passobject.java
首先,我们需要在两台WEB主机上分别建立对passobject的定义,在两台主机上的定义应该是完全一样,这样的类定义和我们通常使用并没有什么不同。只是这样的类必须实现序列化,也就是要实现Serializable:
packagetest;
importjava.io.*;
{
StringPassValue1;
StringPassValue2;
publicvoidsetNewPassObject()
{PassValue1="yzysynew";
PassValue2="new";
}
publicvoidsetOldPassObject()
{PassValue1="yzysyold";
}
}
test.java
在其中的一台web主机上建立。除去加注释的那几行,这完全是一个通常意义上的用于显示的servlet,不过那几行的内容看上去也许会有点让你眼花缭乱。这几行将数据对象传输到了另一台主机的test2中,并接收经过test2处理的数据对象。对于这里所涉及的一些不太常用的API,我们将会在最后一并说明。
packagetest;
importjava.sql.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjavax.servlet.jsp.*;
importjavax.servlet.jsp.tagext.*;
importjava.io.*;
importjava.net.*;
{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsIOException,ServletException
{PassObjectpassobject=newPassObject();
passobject.setNewPassObject();
PrintWriterout=response.getWriter();
out.println(passobject.PassValue1);
out.println(passobject.PassValue2);
//创建一个新的URL实例url
URLurl=newURL("http://141.56.16.8/examples/servlet/test.Test2");
//根据url建立连接
URLConnectioncon=url.openConnection();
//设置该连接可写
con.setDoOutput(true);
//禁用cache
con.setUseCaches(false);
//取出输出流
OutputStreamouts=con.getOutputStream();
//将该输出流转换为对象输出流
ObjectOutputStreamobjout=newObjectOutputStream(outs);
//将要传输的对象写入该对象输出流中
objout.writeObject(passobject);
//取得返回的输入流
InputStreamin=con.getInputStream();
//将该输入流定义为对象输入流
ObjectInputStreamobjStream;
objStream=newObjectInputStream(in);
//按指定类的格式读取输入流的内容
try{
passobject=(PassObject)objStream.readObject();
out.println(passobject.PassValue1);
out.println(passobject.PassValue2);
}
catch(java.lang.ClassNotFoundExceptionysy)
{
out.println("fail");
}
}
publicvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsIOException,ServletException
{
doGet(request,response);
}
}
test2.java
在其中的另一台web主机上建立,用来接收test发送的数据对象,并对其进行处理后返回到test。
packagetest;
importjava.sql.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjavax.servlet.jsp.*;
importjavax.servlet.jsp.tagext.*;
importjava.io.*;
importjava.net.*;
{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsIOException,ServletException
{//封装用于返回的对象输出流
ObjectOutputStreamout=newObjectOutputStream(response.getOutputStream());
//封装用于接收的对象输入流
ObjectInputStreamin=newObjectInputStream(request.getInputStream());
PassObjectpassobject=newPassObject();
//按指定类的格式读取对象输入流中的内容
try{
passobject=(PassObject)in.readObject();
}
catch(java.lang.ClassNotFoundExceptionysy)
{
}
//对接受到的数据对象进行处理
passobject.setOldPassObject();
//将处理后的数据对象返回到对象输出流中
out.writeObject(passobject);
}
publicvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsIOException,ServletException
{
doGet(request,response);
}
}
程序中涉及的部分API的说明
java.net.URL
URL类表示了一个统一资源路径。这样的资源可能是一个文件或目录,也可能是更为复杂的诸如数据库的查询或是搜索引擎。
在我们的程序中使用了URL的一种构造函数:
URL(Stringspec)
直接使用字符串作为构造函数的参数,这实际上是URL的众多构造函数中最为简单的一种。
此外,我们还用到了URL的openConnection()方法:
()
throwsIOException
该方法返回了一个URLConnection对象。每次调用该方法时会开启一个到指定URL的新的连接。
这里需要注意的是,调用该方法的结果是建立了一个连接,这与通常的页面跳转完全是两回事。在更多的情况下,这里仅仅是建立了一个连接的通路,而并没有实现任何其它的操作。
java.net.URLConnection
这是一个抽象类,是所有反映application和一个URL之前的通信的类的超类。这个类的实例可以用来对一个URL表示的资源进行读写。
在我们的程序中我们使用了这个类的如下方法:
getInputStream
()
throwsIOException
返回从这个连接读取的一个输入流
getOutputStream
()
throwsIOException
返回一个用于写入这个连接的输出流
setDoOutput
publicvoidsetDoOutput(booleandooutput)
设置该连接是否可以写入
setUseCaches
publicvoidsetUseCaches(booleanusecaches)
设置该连接是否使用cache
java.io.OutputStream
这是一个抽象类,是所有反映一个二进制输出流的类的超类。一个这样的输出流可以对二进制数据进行输出或发送。
java.io.ObjectOutputStream
该类用来向一个OutputStream写入java的对象。这个对象可以使用ObjectInputStream进行读取或再造。
只有实现java.io.Serializable接口的对象可以写入该数据流中。
在我们的程序中还使用了该类的writeObject()方法:
publicfinalvoidwriteObject(Objectobj)
throwsIOException
将指定的对象写入ObjectOutputStream。
java.io.InputStream
这是一个抽象类,是所有反映一个二进制输入流的类的超类。
java.io.ObjectInputStream
一个ObjectInputStream对一个使用ObjectOutputStream写入的对象进行解析。
在我们的程序中使用了该类的readObject()方法:
publicfinalObjectreadObject()
throwsOptionalDataException,
ClassNotFoundException,
IOException
从一个ObjectInputStream中读取一个对象。
程序执行的结果
如果一切正常,访问test.Test你应该可以看到这样的结果:
yzysynew
new
yzysyold
new
其中yzysynew,new是对象原来的内容,而yzysyold,new所反映的那个对象已经是传送到test2后经test2处理过的了。

㈩ servlet怎么处理文件上传

可以使用commons-fileupload组件实现文件上传,步骤如下:

1、添加jar包:commons-fileupload-x.x.x.jar和commons-io-2.4.jar
2、编写或修改form表单
1) 提交方式必须是post
2) 为表单增加属性enctype="multipart/form-data"
3) 为文件上传单独提供servlet,因为增加enctype属性后,无法使用常规的请求对象来获取提交的数据
3、使用Commons-FileUpload组件实现文件的上传
1) 确定本次请求是否是文件上传请求
boolean flag=ServletFileUpload.isMultipartContent(request);
2) 创建文件上传的工厂对象
FileItemFactory factory=new DiskFileItemFactory();
3) 创建ServletFileUpload对象,并将工厂对象作为参数传入
ServletFileUpload upload=new ServletFileUpload(factory);
4) 使用上传对象从请求对象中解析出提交的所有表单元素
List<FileItem> lstForms=upload.parseRequest(request);
5) 遍历表单元素集合,实现取出表单元素和上传文件
//遍历所有表单元素
for (FileItem fileItem : lstForms) {
//判断每一个表单元素是否是普通表单
if(fileItem.isFormField()){
System.out.println(fileItem.getString("UTF-8"));
}else{
//上传前准备工作
//a、上传后的路径this.getServletContext().getRealPath("/")会出去当前项目在 部署的服务器上的绝对路径

String path=this.getServletContext().getRealPath("/")+"files/";
//b、找出要上传的文件的名字
String fileName=fileItem.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
//c、上传
fileItem.write(new File(path+fileName));
out.println("<h2>"+fileName+"上传成功!</h2>");
}
}