❶ 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);
%>
但是歸根結底,你還是要一個存放文件路徑的資料庫啊,否則你下載時候下載地址每次都寫死或者手動輸入??如果要動態讀取的話還是要建一個存放文件路徑的資料庫的