❶ jsp中文件上传 如果文件存在如何覆盖原来的文件。
当然啊? 你自己看
if((new File(dir + "\\" +file)).exists()){
file=genFileName(orignName,dir);
}
这里的递归`~~~ 不就是死循环么.
❷ 用jsp 怎样实现文件上传
你下载一个jspsmart组件,网上很容易下到,用法如下,这是我程序的相关片断,供你参考: <%@ page import="com.jspsmart.upload.*" %>
<jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload" />
<%
String photoname="photoname";
// Variables
int count=0; // Initialization
mySmartUpload.initialize(pageContext); // Upload
mySmartUpload.upload();
for (int i=0;i<mySmartUpload.getFiles().getCount();i++){ // Retreive the current file
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i); // Save it only if this file exists
if (!myFile.isMissing()) {
java.util.Date thedate=new java.util.Date();
java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
photoname = df.format(thedate);
photoname +="."+ myFile.getFileExt();
myFile.saveAs("/docs/docimg/" + photoname);
count ++; } }
%>
<% String title="1";
String author="1";
String content="1";
String pdatetime="1";
String topic="1";
String imgintro="1";
String clkcount="1"; if(mySmartUpload.getRequest().getParameter("title")!=null){
title=(String)mySmartUpload.getRequest().getParameter("title");
title=new String(title.getBytes("gbk"),"ISO-8859-1");
}
if(mySmartUpload.getRequest().getParameter("author")!=null){
author=(String)mySmartUpload.getRequest().getParameter("author");
author=new String(author.getBytes("gbk"),"ISO-8859-1");
}
if(mySmartUpload.getRequest().getParameter("content")!=null){
content=(String)mySmartUpload.getRequest().getParameter("content");
content=new String(content.getBytes("gbk"),"ISO-8859-1");
}
if(mySmartUpload.getRequest().getParameter("pdatetime")!=null){
pdatetime=(String)mySmartUpload.getRequest().getParameter("pdatetime");
}
if(mySmartUpload.getRequest().getParameter("topic")!=null){
topic=(String)mySmartUpload.getRequest().getParameter("topic");
}
if(mySmartUpload.getRequest().getParameter("imgintro")!=null){
imgintro=(String)mySmartUpload.getRequest().getParameter("imgintro");
imgintro=new String(imgintro.getBytes("gbk"),"ISO-8859-1");
}
if(mySmartUpload.getRequest().getParameter("clkcount")!=null){
clkcount=(String)mySmartUpload.getRequest().getParameter("clkcount");
}
//out.println(code+name+birthday);
%>
❸ jsp上传一个文件夹下的所有文件
jsp上传一个文件夹下的所有文件:
1、上传的upload.jsp:
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>FileUpload</title>
</head>
<body>
<formmethod="post"action="UploadServlet"enctype="multipart/form-data">
Selectfiletoupload:
<inputtype="file"name="dataFile"id="fileChooser"/><br/><br/>
<inputtype="submit"value="Upload"/>
</form>
</body>
</html>
2、后台servlet:
{
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
if(isMultipart){
//Createafactoryfordisk-basedfileitems
FileItemFactoryfactory=newDiskFileItemFactory();
//Createanewfileuploadhandler
ServletFileUploapload=newServletFileUpload(factory);
try{
//Parsetherequest
Listitems=upload.parseRequest(request);
Iteratoriterator=items.iterator();
while(iterator.hasNext()){
FileItemitem=(FileItem)iterator.next();
if(!item.isFormField()){
StringfileName=item.getName();
Stringroot=getServletContext().getRealPath("/");
Filepath=newFile(root+"/uploads");
if(!path.exists()){
booleanstatus=path.mkdirs();
}
FileuploadedFile=newFile(path+"/"+fileName);
System.out.println(uploadedFile.getAbsolutePath());
item.write(uploadedFile);
}
}
}catch(FileUploadExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
❹ jsp文件上传如何规定大小
这是jspsmartupload本身一个缺陷!用jspsmartupload上传东西,当大小超过了某个值后就无法上传了.也就报出了以下异常:
java.lang.OutOfMemoryError: Java heap space
如果是上传小的东西,用这个jspsmartupload这个组件足够了,但是上传大的文件就不行了.建议用commonupload组件.
究其原因在jspsmartupload源码中有:
m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];
int j;
for(; i < m_totalBytes; i += j)
....
而m_request就是HttpServletRequest,它一次将文件流全部读入内存中,也就造成m_totalBytes超级的大,而在new byte[m_totalBytes];时就在内存在分配了一个超大的空间,内存受不了也就直接报异常了.所以除非改掉这种方式的上传否则是没法解决这个问题的.
而commonupload就不一般了,它可以设置一次读取文件最大部分是多少,比部文件有200Mb,你设置一次读取文件的大小是4MB,那么也就超过了一次读4MB到内存,然后就此4MB的部分写入硬盘中的临时文件中,然后再读取下面的4MB,接着把内存的东西刷到硬盘中.也就不会一次读入内存的东西太多,而造成内存的泻漏.
以下是使用commonupload上传的部分代码
String fileName = " ";
String appPath = request.getSession().getServletContext().getRealPath("/") ;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(cacheSize); //缓冲大小
File temFile = new File(appPath+tempFileFold); //超过缓冲小放在临时文件夹,再一步一步上传
if(!temFile.exists()){
temFile.mkdirs();
}
factory.setRepository(temFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize); //最大大小
List fileList = null ;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException e) {
if (e instanceof SizeLimitExceededException) {
System.out.println("超过大小了,返回!");
double maxSize = maxFileSize/(1024.0*1024.0);
if(maxSize>1.0){
float fileSize = Math.round(maxSize*1000)/1000;
request.setAttribute("message", MessageResource.readByString("file_size_overflow")+fileSize+"M");
}else{
double kMaxSize = maxFileSize/(1024.0);
float fileSize = Math.round(kMaxSize*100)/100;
request.setAttribute("message", MessageResource.readByString("file_size_overflow")+fileSize+"K");
}
request.setAttribute("page", request.getParameter("failpage"));
System.out.println("page:"+request.getAttribute("page")+" messgae:"+request.getAttribute("message"));
return "";
}
e.printStackTrace();
}
if (fileList == null || fileList.size() == 0) {
System.out.println("空文件,返回!");
return "";
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
System.out.println("空文件2,返回!");
return "" ;
}
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("\\") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
String[] allowFiles = allowedFilesList.split(",");
boolean isPermited = false ;
for(String allowFile:allowFiles){
if(t_ext.equals(allowFile)){
isPermited = true ;
break ;
}
}
if(!isPermited){
request.setAttribute("message", t_ext+MessageResource.readByString("file_format_error")+allowedFilesList);
request.setAttribute("page", request.getParameter("failpage"));
System.out.println(t_ext+"文件格式不合法,合法文件格式为:"+allowedFilesList);
return "" ;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String newFileName = String.valueOf(now)+"."+t_ext;
// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
File desctemFile = new File(appPath + fileLocationFold); //超过缓冲小放在临时文件夹,再一步一步上传
if(!desctemFile.exists()){
desctemFile.mkdirs();
}
String u_name = appPath + fileLocationFold
+ newFileName ;
fileName = fileLocationFold+newFileName ;
try {
fileItem.write(new File(u_name));
} catch (Exception e) {
e.printStackTrace();
}
}
return fileName ;
❺ jsp文件上传的一个问题
采用不同的控件,接收方法不一样,不知道你用的什么方式上传.
我现在采用的apache common包的uploadfile类,这个你不用担心的,控件总是提供了API将表单数据和文件流分开的方法的.你不知道,可以去查查帮助文档的.
❻ jsp当中如何实现图片文件上传
使用WINRAR分割压缩后上传
1、分割的方法:安装完winrar后,找到要压缩分割的文件,点右键,选“添加到压缩文件(A)…”,在弹出的对话框中,文件名、格式都不用管,只要在“压缩分卷大小”中输入可选的大小,或者直接输入,比如5M,就输入5000000(因为它是以字节为单位的,所以后加6个0,同样,10M就输入10000000,当然它不到5M或10M,但这无关紧要,如果要准确的5M,那就输入5*1024*1024=5242880,不过有点麻烦^-^),然后要“压缩选项”下面的“创建自解压格式文件”前面打上勾,点“确定”即开始压缩,根据你原来文件的大小和压缩分卷的大小生成的文件数也不一样,但一定在你原来文件名的后面加上“.part1.rar(exe)”字样加以区别,其中1是序号,还有part2.rar,part3.rar等。
2、还原的方法(合并):在还原时,只要把这分割后的几个文件(最后的扩展名有part1,part2……)都放在一个文件夹中,双击其中的第一个(扩展名是?????.part1.exe),程序就会提示你输入解压缩的目录,输入以后按“确定”,程序就自动寻找其它几个然后合并成一个。就是你原来的文件。
分卷压缩的基本步骤:
(1)选中你需要分卷压缩的文件,鼠标右键打点击它,在弹出的鼠标右键菜单选项栏中,选择“添加到压缩文件”选项,这是就会弹出压缩文件管理器的参数设置窗口,设置窗口中的其他设置你都可以不必去管他,只需要在窗口下方的“分卷压缩”设置框中输入分卷压缩文件的大小就可以了。分卷压缩文件的大小设置,要根据压缩文件移动时所用的载体(如软盘、可以移动磁盘等)的容量大小,以及压缩文件通过邮箱、QQ发送时,上传文件的大小限制来确定的(分卷压缩主要是为了便于移动和上传)。举个例子:某个文件大小为200M,而你有个U盘(可以移动磁盘)容量为128M,那么你要想把这200M的文件通过U盘复制到其他电脑中的话,你就可以通过对该文件分卷压缩来完成这一过程。你可以在“参数设置”窗口中的分卷压缩设置框中输入120M(保险一些)就行了。
(2)设置好分卷压缩的大小后,点击确定,压缩过程自动开始。在压缩过程中压缩文件管理器会根据设置好的分卷文件大小,自动分卷压缩,即自动分几卷完成压缩过程,就上面的例子讲,会分二卷完成压缩。压缩过程结束后,自然会在原文件旁边生成同名的压缩文件(.1rar、.2rar...)。
(3)分卷压缩后的压缩文件,如果是储存在硬盘中,就必须放在同一文件夹中,才能正常解压缩,你只要解压它们其中任何一个压缩文件,解压后都会是一个完整的原文件。
❼ jsp文件上传
public class MultipartTestServlet extends HttpServlet {
public MultipartTestServlet() { //构造方法
super();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) //servlet的doPost方法处理POST请求
throws ServletException, IOException { //抛出异常
request.setCharacterEncoding("gbk"); //设置字符为GBK
RequestContext requestContext = new ServletRequestContext(request); //实例化RequestContext对象
if(FileUpload.isMultipartContent(requestContext)){
//判断是否包含 multipart 内容
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建基于磁盘的文件工厂
factory.setRepository(new File("c:/tmp/")); // 设置临时目录
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("gbk");
upload.setSizeMax(2000000); //设置缓冲区大小
List items = new ArrayList();
try {
items = upload.parseRequest(request); // 得到所有的文件
} catch (FileUploadException e1) {
System.out.println("文件上传发生错误" + e1.getMessage());
}
Iterator it = items.iterator();
while(it.hasNext()){
FileItem fileItem = (FileItem) it.next();
if(fileItem.isFormField()){
System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); //获得表单中域的名字。获得从浏览器中取得的文件全路径
}else{
System.out.println(fileItem.getFieldName() + " " +
fileItem.getName() + " " +
fileItem.isInMemory() + " " +
fileItem.getContentType() + " " +
fileItem.getSize());
if(fileItem.getName()!=null && fileItem.getSize()!=0){
// 浏览器中取得的文件全路径不为空 大小 不为0 则写入
File fullFile = new File(fileItem.getName());
File newFile = new File("c:/temp/" + fullFile.getName());
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("文件没有选择 或 文件内容为空");
}
}
}
}
}
}
❽ jsp如何上传文件
只是jsp部分的话,只要在form标签里加一个“enctype="multipart/form-data"”就好了,读取下载的话只要弄个commons-fileupload之类的插件就很容易解决
这里是下载部分的核心代码:
<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %>
<%
String sUrl = (String)request.getAttribute("fileurl");
SmartUpload su = new SmartUpload();
su.initialize(pageContext);
//设定contentDisposition为null以禁止浏览器自动打开文件,保证点击链接后是下载文件。若不设定,则下载的文件扩展名为doc时,浏览器将自动用word打开它;扩展名为pdf时,浏览器将用acrobat打开。
su.setContentDisposition(null);
su.downloadFile(sUrl);
%>
但是归根结底,你还是要一个存放文件路径的数据库啊,否则你下载时候下载地址每次都写死或者手动输入??如果要动态读取的话还是要建一个存放文件路径的数据库的