java上傳和下載文件代碼_JavaWeb中上傳和下載文件實例代碼

一丶先引入上傳下載的lib

cdbfb89594c5491f9a1e300cb7d68329.png

二丶上傳的的servlet

package com.test.action;

import java.io.file;

import java.io.fileoutputstream;

import java.io.ioexception;

import java.io.inputstream;

import java.io.outputstream;

import java.util.list;

import javax.servlet.servletexception;

import javax.servlet.annotation.webservlet;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

import org.apache.commons.fileupload.fileitem;

import org.apache.commons.fileupload.fileuploadexception;

import org.apache.commons.fileupload.disk.diskfileitemfactory;

import org.apache.commons.fileupload.servlet.servletfileupload;

@webservlet("/upload")

public class fileuploadaction extends httpservlet {

private static final long serialversionuid = 1l;

protected void dopost(httpservletrequest request,

httpservletresponse response) throws servletexception, ioexception {

// 設置編碼

request.setcharacterencoding("utf-8");

//對提交的數據進行處理,保存上傳文件

boolean success = processupload(request);

if(success){

//獲取表單text控件的值

string account = request.getattribute("account").tostring();

system.out.println(account);

//獲取文件上傳的原始名稱

string filename = request.getattribute("upfile").tostring();

system.out.println(filename);

//獲取文件上傳后,服務器上保存的名字

string filenameserver = request.getattribute("upfileserver").tostring();

system.out.println(filenameserver);

request.setattribute("upfile", filenameserver);

request.setattribute("message", "上傳成功");

}

request.getrequestdispatcher("/upload.jsp").forward(request, response);

}

private boolean processupload(httpservletrequest request) {

boolean success = true;

string message = null;

// 獲取文件需要上傳到的路徑

string path = request.getservletcontext().getrealpath("/upload");

system.out.println(path);

// 如果此文件夾不存在,則構造此文件夾

file f = new file(path);

if (!f.exists()) {

f.mkdir();

}

// 構造出文件工廠,用于存放jsp頁面中傳遞過來的文件

diskfileitemfactory factory = new diskfileitemfactory();

// 設置上傳文件的保存路徑

factory.setrepository(f);

// 設置緩存大小,如果文件大于緩存大小時,則先把文件放到緩存中

factory.setsizethreshold(1 * 1024 * 1024);

servletfileupload upload = new servletfileupload(factory);

// 設置可以上傳文件大小的上界20mb

upload.setsizemax(20 * 1024 * 1024);

try {

// 可以上傳多個文件

list list = (list) upload.parserequest(request);

for (fileitem item : list) {

// 獲取表單的屬性名字

string name = item.getfieldname();

if (item.isformfield()) {

string value = item.getstring();

//解決亂碼問題

value = new string(value.getbytes("iso-8859-1"),"utf-8");

request.setattribute(name, value);

} else {

// 獲得文件類型

string contenttype = item.getcontenttype();

// 獲得文件大小

long filesize = item.getsize();

// 獲取路徑名

string value = item.getname();

// 索引到最后一個反斜杠

int start = value.lastindexof("\\");

// 截取 上傳文件的 字符串名字,加1是 去掉反斜杠,

string filename = value.substring(start + 1);

if (filename != null && !filename.trim().equals("")) {

// 如果上傳的文件不是圖片,那么不上傳

string allimgext = ".jpg|.jpeg|.gif|.bmp|.png|";

string extname = filename.substring(filename.indexof("."), filename.length());

if (allimgext.indexof(extname + "|") == -1) {

message = "該文件類型不允許上傳。請上傳 " + allimgext

+ " 類型的文件,當前文件類型為" + extname;

success = false;

break;

}

request.setattribute(name, filename);

// 隨機數產生名稱

string newname = system.currenttimemillis() + extname;

request.setattribute(name + "server", newname);

// 將文件保存到服務器中

inputstream in = item.getinputstream();

// 原文件名

// outputstream out = new fileoutputstream(new file(path, filename));

// 隨機數文件名

outputstream out = new fileoutputstream(new file(path,

newname));

int length = 0;

byte[] buf = new byte[1024];

while ((length = in.read(buf)) != -1) {

out.write(buf, 0, length);

}

in.close();

out.close();

}

}

}

} catch (fileuploadexception e) {

message = "文件的內容過大,請上傳小于20mb的文件" ;

success = false;

e.printstacktrace();

} catch (ioexception e) {

success = false;

e.printstacktrace();

}

request.setattribute("message", message);

return success;

}

}

三丶下載的servlet

package com.test.action;

import java.io.file;

import java.io.fileinputstream;

import java.io.ioexception;

import java.io.outputstream;

import javax.servlet.servletexception;

import javax.servlet.annotation.webservlet;

import javax.servlet.http.httpservlet;

import javax.servlet.http.httpservletrequest;

import javax.servlet.http.httpservletresponse;

@webservlet("/download")

public class filedownloadaction extends httpservlet {

private static final long serialversionuid = 1l;

protected void doget(httpservletrequest request,

httpservletresponse response) throws servletexception, ioexception {

string id = request.getparameter("id");

// 根據主鍵讀取文件的真實名字 + 服務器上的名字

processdownload("1444442288605.png", "騰訊.png", request, response);

}

private boolean processdownload(string filename, string savename,

httpservletrequest request, httpservletresponse response) {

boolean success = true;

// 獲取文件下載所在的路徑

string path = request.getservletcontext().getrealpath("/upload");

file fileload = new file(path, filename); // 下載文件

long filelength = fileload.length(); // 文件大小

byte[] buffer = new byte[1024]; // 緩沖字節數組

try {

response.reset();

response.setheader("content-disposition", "attachment;filename=\""

+ new string(savename.getbytes("gb2312"), "iso-8859-1") + "\"");

response.setcontenttype("application/octet-stream");

response.setheader("content_length", string.valueof(filelength));

outputstream os = response.getoutputstream();

fileinputstream in = new fileinputstream(fileload);

int hasread = 0;

while ((hasread = in.read(buffer)) != -1) {

os.write(buffer, 0, hasread);

}

os.flush();

os.close();

in.close();

} catch (ioexception e) {

success = false;

e.printstacktrace();

}

return success;

}

}

以上所述是小編給大家介紹的javaweb中上傳和下載文件實例代碼,希望對大家有所幫助

如您對本文有疑問或者有任何想說的,請點擊進行留言回復,萬千網友為您解惑!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270551.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka java api 刪除_使用Java API創建(create),查看(describe),列舉(list),刪除(delete)Kafka主題(Topic)...

使用Kafka的同學都知道,我們每次創建Kafka主題(Topic)的時候可以指定分區數和副本數等信息,如果將這些屬性配置到server.properties文件中,以后調用Java API生成的主題將使用默認值,先改變需要使用命令bin/kafka-topics.sh --zook…

操作系統:Linux 環境變量配置的 6 種方法

目錄 Linux環境變量配置 Linux讀取環境變量 Linux環境變量配置方法一:export PATH Linux環境變量配置方法二:vim ~/.bashrc Linux環境變量配置方法三:vim ~/.bash_profile Linux環境變量配置方法四:vim /etc/bashrc Linux環境變量…

操作系統:Win10有哪些版本,看完你就知道了

目錄 一、win10家庭版 二、win10專業版 三、win10企業版 四、win10教育版 Win10有四個版本是我們最常見的:win10家庭版、win10專業版、win10企業版、win10教育版。 今天就主要說這4個比較經典的版本,一起來看看吧! 一、win10家庭版 一般來說&…

mysql-5.5.8_MySQL5.5.8安裝

一、軟件包a) cmake-2.8.3.tar.gzb) mysql-5.5.8.tar.gz二、安裝步驟a) Tar zxvf cmake-2.8.3.tar.gzb) Cd cmake-2.8.3c) ./bootstrapd) Makee) Make installf) Tar zxvf mysql-5.5.8.tar.gzg) Cd mysql-5.5.8h) 配置參數cmake . -DCMAKE_INSTALL_PREFIX/usr/local/mysql5 \-D…

C# Web實時消息后臺服務器推送技術-GoEasy

越來越多的項目需要用到實時消息的推送與接收,怎樣用C#實現最方便呢?我這里推薦大家使用GoEasy, 它是一款第三方推送服務平臺,使用它的API可以輕松搞定實時推送! 瀏覽器兼容性:GoEasy推送 支持websocket 和polling兩種…

硬件知識:打印機常見的故障及維護,值得收藏

一、打印時不出墨癥狀 打印機在聯機或自檢時,打印頭有動作,但打印不出墨。故障分析 這一情況發生,有多方面原因,可能包括噴頭故障,清潔單元故障,電鍍及電路板故障等,但在排除了噴頭故障后可以這…

mac下SecureCRT連接阿里云服務器最新教程

一.首先進入自己的阿里云管理控制臺 地址 https://ecs.console.aliyun.com/?spm5176.6660585.774526198.1.57c96bf8inrLvC#/home 二:輸入密碼 三:點擊密碼重置 四:打開SecureCRT 點擊加號 五:點擊continue 六:在Ho…

oralce之存儲過程

一:--循環向表emp中插入數據 1 declare 2 maxnumber number:10000;3 v_count number;4 begin5 v_count :0;6 FOR x IN 1..maxnumber7 LOOP8 v_count :v_count1;9 insert into emp (empno,ename,job,mgr,sal,comm) 10 valu…

java 日期calendar_java時間對象Date,Calendar和LocalDate/LocalDateTime

一、簡介Date:java.util.Date包,包含日期,時間,毫秒數。Calendar:java.util.Calendar包,abstract修飾,Date的很多方法已經過時遷移到了Calendar類上。LocalDate/LocalDateTime:java.…

IIS實現服務器反向代理用法介紹

今天給打擊分享IIS實現服務器反向代理用法,感興趣的可以學習一下!場景:本地電腦啟動了兩個網站地址分別為:http://127.0.0.1:8081/Sitehttp://127.0.0.1:8082/Test要實現同一個端口訪問:http://127.0.0.1:8080/Sitehtt…

java if else過多_Spring Boot中如何干掉過多的if else!

需求這里虛擬一個業務需求,讓大家容易理解。假設有一個訂單系統,里面的一個功能是根據訂單的不同類型作出不同的處理。訂單實體:service接口:傳統實現根據訂單類型寫一堆的if else:策略模式實現利用策略模式&#xff0…

硬件知識:固態硬盤相關知識介紹

目錄 1、主控 2、固件算法 3、SSD的SATA接口與M.2接口 4、速度對比 今天就為大家全面科普一下固態硬盤的相關知識,讓大家購買時做到心中有數,按需選擇。 首先還是從SSD的結構來說起,SSD最基本的組成部件分為:主控芯片、閃存芯片、…

編碼實戰Web端聯系人的增刪改查

首先畫出分析圖 實現效果如圖 項目下的包如圖: 實體包 package com.contactSystem.entiey;public class Contact {private String Id;private String name;private String sex;private String age;private String phone;private String qq;private String email;pub…

選型java程序_Java程序員自動化指南

一、背景在Java web開發中,雖然Spring boot已經幫助我們簡化了很多工作,但項目中龐雜的業務仍然需要自己去編寫較多的 entity,vo,Mapper,Service, Controller 代碼等,那么我們有沒有什么辦法來簡…

網絡知識:光貓光纖寬帶故障排查筆記

在日常上網過程中出現的故障,很大一部分是由于線路和光貓故障引起,現簡單介紹一下,如何處理這些故障。 現象一:不能上網(網絡中斷) 故障排查: 1、確認您的光貓信號燈是否正常: ①電源…

treeview自動從表中添加標題和列值做目錄的方法2

treeview自動從表中添加標題和列值做目錄的方法2,該方法是借鑒萬一老師的 http://www.cnblogs.com/del/archive/2008/05/15/1114450.html 首先界面上添加treeview組件,然后在treeview的onchange事件里這樣寫: 因為要用到定義個過程&#xff0…