這個(gè)事多線程下載一個(gè)文件
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、冀州網(wǎng)站維護(hù)、網(wǎng)站推廣。
這個(gè)是同時(shí)下載多個(gè)文件得
希望對你有用,多線程下載這玩意沒寫過,不過,可以給你個(gè)思路,不知正確與否,希望與你有用:
對同一個(gè)文件或http建立connection,然后獲取整個(gè)文件得大小,(只有知道文件大小才能同時(shí)使用多線程建立多個(gè)連接來分段下載,如果不知道文件大小,想用多線程下載一定要做好線程同步工作,且速度提高不快,而且只能用線程輪流讀取同一個(gè)輸入流,而不能用不同得線程做不同得連接來下載),然后執(zhí)行數(shù)據(jù)分段計(jì)算,算出每個(gè)線程建立連接后需要從哪個(gè)偏移量進(jìn)行下載(需要使用文件得大小除以給定的線程數(shù)來算出),之后進(jìn)行連接,每個(gè)線程建立連接后根據(jù)算出得下載偏移量將數(shù)據(jù)指針移到需要下載得位置開始下載,當(dāng)所有線程下載完畢后再將每個(gè)線程下載得文件按下載得前后順序(這里得順序意思用一個(gè)例子來說明:比如a線程負(fù)責(zé)下載0到99字節(jié),b線程負(fù)責(zé)下載100到199字節(jié),c線程下載200到299字節(jié),那么當(dāng)所有線程下載完畢后需要將先將b線程下載好得文件增加到a線程下載得文件中,再將c線程下載得文件增加到a線程下載得文件中,然后刪除b,c線程下載得文件.)合成一個(gè)文件.
上面只是我個(gè)人意見,不知道是否正確,呵呵.
愿上帝保佑吧.呵呵.
應(yīng)該是用struts作的吧,a.java是一個(gè)action類,在action類中將獲得值保存到request或session中,也就是request.setAttribute("xxx",xxxx);在c.jsp中獲得request或session中的值,%=request.getAttribute(xxx);% 這樣就把后面的xxxx的值獲得了。
目測暫時(shí)沒發(fā)現(xiàn)什么問題。首先你確認(rèn)一下你是否是ajax異步提交的請求,如果是ajax提交的,是不會(huì)彈出下載框的,其次看是不是瀏覽器的問題,多試幾個(gè)瀏覽器看
您好,看到您圖片的目錄結(jié)構(gòu),項(xiàng)目應(yīng)該是基于 MVC 的分層結(jié)構(gòu)進(jìn)行開發(fā)代碼的。一般程序的請求入口是您的 controller 包下面。
如果目前還不確定是哪個(gè)請求,先在瀏覽器打開開發(fā)者控制臺(tái),找到具體的請求地址。這里以京東為例。域名后面的一般就是請求的路徑,比如下圖這個(gè) /getinfo。
確認(rèn)具體的請求路徑后,在 idea 左側(cè)選中項(xiàng)目根目錄右鍵 Find in the path,輸入請求路徑 getinfo,應(yīng)該能定位到具體的 controller 接口。
如果還是搜索不到,可以在 idea 下載一個(gè) Restful Tool kit 插件,下載好后重啟 idea,使用快捷鍵 cmd + / 進(jìn)行快捷搜索 RESTful 接口。
希望我的回答可以幫助到你。
struts 有提供的。
文件上傳
1.jsp頁面
s:form action="fileAction" namespace="/file" method="POST" enctype="multipart/form-data"
!-- name為后臺(tái)對應(yīng)的參數(shù)名稱 --
s:file name="files" label="file1"/s:file
s:file name="files" label="file2"/s:file
s:file name="files" label="file3"/s:file
s:submit value="提交" id="submitBut"/s:submit
/s:form
2.Action
//單個(gè)文件上傳可以用 File files,String filesFileName,String filesContentType
//名稱要與jsp中的name相同(三個(gè)變量都要生成get,set)
private File[] files;
// 要以File[]變量名開頭
private String[] filesFileName;
// 要以File[]變量名開頭
private String[] filesContentType;
private ServletContext servletContext;
//Action調(diào)用的上傳文件方法
public String execute() {
ServletContext servletContext = ServletActionContext.getServletContext();
String dataDir = servletContext.getRealPath("/file/upload");
System.out.println(dataDir);
for (int i = 0; i files.length; i++) {
File saveFile = new File(dataDir, filesFileName[i]);
files[i].renameTo(saveFile);
}
return "success";
}
3.配置上傳文件臨時(shí)文件夾(在struts.xml中配置)
constant name="struts.multipart.saveDir" value="c:/temp"/
文件下載
1.下載的url(到Action)
a href="${pageContext.request.contextPath}/file/fileAction!down.action"下載/a
2.struts.xml配置
package name="file" namespace="/file" extends="struts-default"
action name="fileAction" class="com.struts2.file.FileAction"
!-- 下載文件配置 --
!--type 為 stream 應(yīng)用 StreamResult 處理--
result name="down" type="stream"
!--
不管實(shí)際類型,待下載文件 ContentType 統(tǒng)一指定為 application/octet-stream
默認(rèn)為 text/plain
--
param name="contentType"application/octet-stream/param
!--
默認(rèn)就是 inputStream,它將會(huì)指示 StreamResult 通過 inputName 屬性值的 getter 方法,
比如這里就是 getInputStream() 來獲取下載文件的內(nèi)容,意味著你的 Action 要有這個(gè)方法
--
param name="inputName"inputStream/param
!--
默認(rèn)為 inline(在線打開),設(shè)置為 attachment 將會(huì)告訴瀏覽器下載該文件,filename 指定下載文
件保有存時(shí)的文件名,若未指定將會(huì)是以瀏覽的頁面名作為文件名,如以 download.action 作為文件名,
這里使用的是動(dòng)態(tài)文件名,${fileName}, 它將通過 Action 的 getFileName() 獲得文件名
--
param name="contentDisposition"attachment;filename="${fileName}"/param
!-- 輸出時(shí)緩沖區(qū)的大小 --
param name="bufferSize"4096/param
/result
/action
/package
3.Action
//Action調(diào)用的下載文件方法
public String down() {
return "down";
}
//獲得下載文件的內(nèi)容,可以直接讀入一個(gè)物理文件或從數(shù)據(jù)庫中獲取內(nèi)容
public InputStream getInputStream() throws Exception {
String dir = servletContext.getRealPath("/file/upload");
File file = new File(dir, "icon.png");
if (file.exists()) {
//下載文件
return new FileInputStream(file);
//和 Servlet 中不一樣,這里我們不需對輸出的中文轉(zhuǎn)碼為 ISO8859-1
//將內(nèi)容(Struts2 文件下載測試)直接寫入文件,下載的文件名必須是文本(txt)類型
//return new ByteArrayInputStream("Struts2 文件下載測試".getBytes());
}
return null;
}
// 對于配置中的 ${fileName}, 獲得下載保存時(shí)的文件名
public String getFileName() {
String fileName ="圖標(biāo).png";
try {
// 中文文件名也是需要轉(zhuǎn)碼為 ISO8859-1,否則亂碼
return new String(fileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
return "icon.png";
}
}
你好,你想復(fù)雜了,上傳和下載文件于普通的做法差不多,區(qū)別在于rest風(fēng)格上傳文件要用post方法,下載用get方法,而且URL符合rest風(fēng)格的要求即可
文章標(biāo)題:java下載后臺(tái)代碼 java后端項(xiàng)目代碼
分享網(wǎng)址:http://chinadenli.net/article22/doddjjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、服務(wù)器托管、ChatGPT、全網(wǎng)營銷推廣、App開發(fā)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)