當前位置:首頁 » 文件傳輸 » 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>");
}
}