文件上傳功能-ag真人国际官网
⑴ java web文件上傳步驟
java web文件上傳步驟如下:
實現 web 開發中的文件上傳功能,兩個操作:在 web 頁面添加上傳輸入項,在 servlet 中讀取上傳文件的數據並保存在本地硬碟中。
1、web 端上傳文件。在 web 頁面中添加上傳輸入項: 設置文件上傳輸入項時應注意:(1) 必須設置 input 輸入項的 name 屬性,否則瀏覽器將不會發送上傳文件的數據。(2) 必須把 form 的 enctype 屬性設為 multipart/form-data,設置該值後,瀏覽器在上傳文件時,將把文件數據附帶在 http 請求消息體中,並使用 mime 協議對上傳文件進行描述,以方便接收方對上傳數據進行解析和處理。(3) 表單提交的方式要是 post
2、伺服器端獲取文件。如果提交表單的類型為 multipart/form-data 時,就不能採用傳統方式獲取數據。因為當表單類型為 multipart/form-data 時,瀏覽器會將數據以 mime 協議的形式進行描述。如果想在伺服器端獲取數據,那麼我們必須採用獲取請求消息輸入流的方式來獲取數據。
3、apache-commons-fileupload。為了方便用戶處理上傳數據,apache 提供了一個用來處理表單文件上傳的開源組建。使用 commons-fileupload 需要 commons-io 包的支持。
4、fileuplpad 組建工作流程
(1)客戶端將數據封裝在 request 對象中。
(2)伺服器端獲取到 request 對象。
(3)創建解析器工廠 diskfileitemfactory 。
(4)創建解析器,將解析器工廠放入解析器構造函數中。之後解析器會對 request 進行解析。
(5)解析器會將每個表單項封裝為各自對應的 fileitem。
(6)判斷代表每個表單項的 fileitem 是否為普通表單項 isformfield,返回 true 為普通表單項。
(7)如果是普通表單項,通過 getfieldname 獲取表單項名,getstring 獲得表單項值。
(8)如果 isformfield 返回 false 那麼是用戶要上傳的數據,可以通過 getinputstream 獲取上傳文件的數據。通過getname 可以獲取上傳的文件名。
⑵ 在flash中如何實現文件上傳功能
你問的問題,也是我找了很久的問題.局我自己所知,flash現在還沒有這個功能吧,flash裡面沒有這個可能瀏覽自己本地的磁碟文件的組件.想要實現上傳也只能自己來寫出要上傳文件的路徑,再把這個路徑連接發送能asp文件或php,用它們來實現上傳的後台工作~~``
(這是我自己所知道的,如果兄弟你要是知道怎麼實現你自己所說的問題的答案的話,那麻煩你能不能也告訴我一下,謝謝)
⑶ 網站網頁里怎樣添加上傳功能
樓主不妨去卓天網路和萬網看下,還是找大服務商好些,只是萬網有點貴,我樓上的人可能被億佰數據騙了,億佰數據只不過是代理的卓天網路的產品,才做不到一年還不夠成熟,以後用的過程中出現什麼問題,買前會很耐後的回答你,買後就不理你了,不信可以拿幾百塊錢去試試,億佰數據所謂的自助建站還不錯,幾百個模板任選,界面很清新,同時支持簡體中文版、繁體中文版、英文版三種語言網站,功能也很強,帶產品發布系統、新聞系統、會員系統、投票系統、廣告系統、招聘系統等動態功能模塊,頁面隨意增加。運用功能強大的管理平台,輕點滑鼠就能立即製作精美的網站,非常適合中小企業建站等,都是在卓天網路以低價代理來的,不信在網路輸一下億佰數據和卓天網路就真相大白了,我是上當來著的,不小心看到了也提醒一下樓主。
⑷ 如何設計出一個安全的文件上傳功能
這兩天我們的老朋友pdp在blackhat 08上做了一個關於gifar的演講。和往常一樣,pdp的東西基本上都很猥瑣,這個也是。主題是關於是如何把gif或者 jpg文件和jar文件捆綁在一起,然後欺騙伺服器以為是gif或jpg文件,結果卻是在客戶端的jvm中執行jar的例子。
他還舉了些欺騙的例子,比如在office2007中,doc文件實際上就是zip格式了,裡面都是些xml,那麼他把jar文件打包在zip文件里,再把後綴改成doc,來達到欺騙的目的。
在這里是客戶端的問題,我想到的則是其他的問題,比如安全上傳。
根據以往的經驗看來,我們可能會設計如下文件上傳的安全規則:
1. 文件上傳的目錄設置為不可執行
2. 判斷文件類型
3. 單獨設置文件伺服器的域名
4. 改寫文件名,文件路徑不可預測
第一點規則是顯而易見的,是為了減小執行動態語言腳本的風險。如果被成功上傳了一個webshell,但是不能執行,還是能夠起到深度防禦的作用。
第二點,在判斷文件類型的時候,我們一般要求使用白名單,而不是黑名單,因為黑名單可能會列不全,還可能會造成一些bypass的風險。
比如以前老版本的 fckeditor就出過這種問題,只做了黑名單的控制,最後被bypass。
而apache有個特性,是解析第一個「 . 」後的文件後綴作為文件類型,比如 fvck.php.rar.rar.rar 會被apache當作 fvck.php解析。 我最近看了下php的手冊,在安裝文檔里,針對這個問題,專門有一個指導:
15. tell apache to parse certain extensions as php. for example, lets have
apache parse .php files as php. instead of only using the apache addtype
directive, we want to avoid potentially dangerous uploads and created
files such as exploit.php.jpg from being executed as php. using this
example, you could have any extension(s) parse as php by simply adding
them. well add .phtml to demonstrate.
sethandler application/x-httpd-php
iis6也有這種類似的特性,即在文件夾名字為 fvck.asp 時(fvck可替換為任意值),該文件夾下任何文件都會被當作asp來執行,
至今似乎也未見到微軟有把這個特性當作bug來fix的跡象。
所以如果不熟悉這些webserver的特性,你可能會覺得漏洞來的如此神奇:我明明做了充分限制,為什麼還是被「做俯卧撐」了?
在判斷文件類型的時候,大多數程序都是使用的採用檢查文件後綴的方法,這里主要需要注意的hacking trick是某些檢查函數是否會以0位元組作為結束的判斷,以前動網就出過類似的漏洞,上傳 fvck.jpg.asp即可繞過文件類型檢查。
我也見過只檢查文件頭部的,這種也很好欺騙,構造一個合法的gif文件頭部,然後將webshell貼在後面,在後綴合法的情況下,一樣能夠被瀏覽器解析:
gif89a ?
比較高級一點的是做更多的文件格式檢查,比如檢查圖片里像素的長寬等,然後再對圖片做一次壓縮,這樣出來的圖片基本都變形了,有啥webshell也被破壞了。
而檢查文件格式時候一般會用到一些網上已經封裝好的類,在掃描文件格式方面還是比較有優勢的。但是在檢查大文件的時候效率顯然是一個需要考慮的問題,很多程序員出於效率原因可能不太會願意選擇這種方式。
但是今天從pdp的這個綁定文件的猥瑣方法看來,詳細檢查文件格式的方法還是非常有必要的,因為攻擊者的目標可能不光是伺服器,還是客戶端,如果要對客戶端有所保證,就必須要詳細檢查文件格式,使之落在白名單中。
第三點,單獨設置文件伺服器域名,也是一種針對客戶端的保護。這樣可能會避免許多跨域的問題。如果發生了xss,攻擊者可能還需要突破跨域的限制才能進一步擴大戰果。再比如如果被上傳了crossdomain.xml,可能就會導致flash的跨域問題,這些都是實實在在的風險。
第四點,改寫文件名,隨機文件路徑。這是把風險藏起來,現在基本上盡職一點的程序員都會這么設計,這也是最大程度減小風險的非常切實有效的手段。
需要注意的是構造隨機文件名或路徑的演算法需要足夠「隨機」,而不要從比如cookie之類的地方直接取一段hash出來。比較好的做法是在server上用類似random()一類的函數來生成,相信程序員們這點意識還是有的,不再贅述了。
⑸ 如何實現點擊button實現上傳文件的功能
如何實現點擊button實現上傳文件的功能
可以試下:
⑹ 如何實現在網站的文件上傳和下載功能
呵呵, asp的到java來問啦.
-------給你引用一段。
文件的上傳下載是我們在實際項目開發過程中經常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括:
1、如何解決文件上傳大小的限制
2、以文件形式保存到伺服器
3、轉換成二進制位元組流保存到資料庫以及下載方法
4、上傳internet上的資源
第一部分:
首先我們來說一下如何解決asp.net中的文件上傳大小限制的問題,我們知道在默認情況下asp.net的文件上傳大小限制為2m,一般情況下,我們可以採用更改web.config文件來自定義最大文件大小,如下:
iserviceproviderprovider=(iserviceprovider)httpcontext.current;
httpworkerrequestwr=(httpworkerrequest)provider.getservice(typeof(httpworkerrequest));
byte[]bs=wr.getpreloadedentitybody();
.
if(!wr.isentireentitybodyispreloaded())
{
intn=1024;
byte[]bs2=newbyte[n];
while(wr.readentitybody(bs2,n)>0)
{
..
}
}這樣就可以解決了大文件的上傳問題了。
第二部分:
下面我們來介紹如何以文件形式將客戶端的一個文件上傳到伺服器並返回上傳文件的一些基本信息
首先我們定義一個類,用來存儲上傳的文件的信息(返回時需要)。
public class fileupload
{
public fileupload()
{
}
/**////
/// 上傳文件名稱
///
public string filename
{
get
{
return filename;
}
set
{
filename = value;
}
}
private string filename;
/**////
/// 上傳文件路徑
///
public string filepath
{
get
{
return filepath;
}
set
{
filepath = value;
}
}
private string filepath;
/**////
/// 文件擴展名
///
public string fileextension
{
get
{
return fileextension;
}
set
{
fileextension = value;
}
}
private string fileextension;
}
另外我們還可以在配置文件中限制上傳文件的格式(app.config):
這樣我們就可以開始寫我們的上傳文件的方法了,如下:
public fileupload uploadfile(htmlinputfile inputfile,string filepath,string myfilename,bool israndom)
{
fileupload fp = new fileupload();
string filename,fileextension;
string savename;
//
//建立上傳對象
//
httppostedfile postedfile = inputfile.postedfile;
filename = system.io.path.getfilename(postedfile.filename);
fileextension = system.io.path.getextension(filename);
//
//根據類型確定文件格式
//
appconfig app = new appconfig();
string format = app.getpath("fileupload/format");
//
//如果格式都不符合則返回
//
if(format.indexof(fileextension)==-1)
{
throw new applicationexception("上傳數據格式不合法");
}
//
//根據日期和隨機數生成隨機的文件名
//
if(myfilename != string.empty)
{
filename = myfilename;
}
if(israndom)
{
random objrand = new random();
system.datetime date = datetime.now;
//生成隨機文件名
savename = date.year.tostring() date.month.tostring() date.day.tostring() date.hour.tostring() date.minute.tostring()
date.second.tostring() convert.tostring(objrand.next(99)*97 100);
filename = savename fileextension;
}
string phypath = httpcontext.current.request.mappath(filepath);
//判斷路徑是否存在,若不存在則創建路徑
directoryinfo updir = new directoryinfo(phypath);
if(!updir.exists)
{
updir.create();
}
//
//保存文件
//
try
{
postedfile.saveas(phypath filename);
fp.filepath = filepath filename;
fp.fileextension = fileextension;
fp.filename = filename;
}
catch
{
throw new applicationexception("上傳失敗!");
}
//返回上傳文件的信息
return fp;
}
然後我們在上傳文件的時候就可以調用這個方法了,將返回的文件信息保存到資料庫中,至於下載,就直接打開那個路徑就ok了。
第三部分:
這里我們主要說一下如何以二進制的形式上傳文件以及下載。首先說上傳,方法如下:
public byte[] uploadfile(htmlinputfile f_ifile)
{
//獲取由客戶端指定的上傳文件的訪問
httppostedfile upfile=f_ifile.postedfile;
//得到上傳文件的長度
int upfilelength=upfile.contentlength;
//得到上傳文件的客戶端mime類型
string contenttype = upfile.contenttype;
byte[] filearray=new byte[upfilelength];
stream filestream=upfile.inputstream;
filestream.read(filearray,0,upfilelength);
return filearray;
}
這個方法返回的就是上傳的文件的二進制位元組流,這樣我們就可以將它保存到資料庫了。下面說一下這種形式的下載,也許你會想到這種方式的下載就是新建一個aspx頁面,然後在它的page_load()事件里取出二進制位元組流,然後再讀出來就可以了,其實這種方法是不可取的,在實際的運用中也許會出現無法打開某站點的錯誤,我一般採用下面的方法:
首先,在web.config中加入:
這表示我打開openfile.aspx這個頁面時,系統就會自動轉到執行ruixinoa.web.baseclass.openfile 這個類里的方法,具體實現如下:
using system;
using system.data;
using system.web;
using system.io;
using ruixin.workflowdb;
using rxsuite.base;
using rxsuite.component;
using ruixinoa.businessfacade;
namespace ruixinoa.web.baseclass
{
/**////
/// netufile 的摘要說明。
///
public class openfile : ihttphandler
{
public void processrequest(httpcontext context)
{
//從資料庫中取出要下載的文件信息
ruixinoa.businessfacade.rx_oa_filemanager os = new rx_oa_filemanager();
entitydata data = os.getfiledetail(id);
if(data != null && data.tables["rx_oa_file"].rows.count > 0)
{
datarow dr = (datarow)data.tables["rx_oa_file"].rows[0];
context.response.buffer = true;
context.response.clear();
context.response.contenttype = dr["ccontenttype"].tostring();
context.response.addheader("content-disposition","attachment;filename=" httputility.urlencode(dr["ctitle"].tostring()));
context.response.binarywrite((byte[])dr["ccontent"]);
context.response.flush();
context.response.end();
}
}
public bool isreusable
{
get { return true;}
}
}
}
執行上面的方法後,系統會提示用戶選擇直接打開還是下載。這一部分我們就說到這里。
第四部分:
這一部分主要說如何上傳一個internet上的資源到伺服器。前面我們有一篇文章詳細介紹了使用方法,這里我不再多說。
請參考:將動態頁面轉化成二進制位元組流
第五部分:總結
今天簡單的介紹了幾種文件上傳與下載的方法,都是在實際的項目開發中經常需要用到的,可能還有不完善的地方,希望大家可以互相交流一下項目開發中的經驗。寫的不好的地方,請指正,謝謝!
⑺ access 如何做上傳文件的功能
1、利用filedialog對象的文件拾取器獲取客戶端文件路徑(並同時獲取文件名),並實現多選。
2、用filecopy方法,把客戶端圖片復制到後台資料庫文件夾。
3、用ado記錄集,把存放在後台資料庫的圖片路徑字元串追加到數據表中。
4、通過設置窗體或者報表中圖片路徑的方法在窗體或者報表中顯示圖片。
http://www.office-cn.net/forum.php?mod=viewthread&tid=83567 請參考這個示例
⑻ 360瀏覽器中無法使用文件上傳功能
1、首先打開360瀏覽器,點擊選擇右上角「三」圖標按鈕。
⑼ vb中如何實現上傳文件的功能
用script腳本 直接調用ftp 命令實現上傳文件到ftp伺服器。
代碼如下:
'定義api函數
constsynchronize=&h100000
constinfinite=&hffffffff
"kernel32"(byvaldwdesiredaccessaslong,byvalbinherithandleaslong,byvaldwprocessidaslong)aslong
"kernel32"(byvalhobjectaslong)aslong
"kernel32"(byvalhhandleaslong,byvaldwmillisecondsaslong)aslong
privatesubcommand1_click()
dimfilenameasstring
dimftpasstring
dimunameasstring
dimupinasstring
ftp=inputbox("請輸入伺服器地址")
uname=inputbox("請輸入帳號",,"anonymous")
upin=inputbox("請輸入密碼",,"ie@user")
filename=timer()'取時間為文件名filename
openfilename&".script"foroutputas#1'生成filename.script腳本,傳輸ftp用
print#1,"user"
print#1,uname
print#1,upin
print#1,"pwd"
print#1,"hash"
print#1,"put"&filename&".txt"
print#1,"quit"
close#1
openfilename&".txt"foroutputas#1'生成的filename.txt保存了combo1和text1的文字
print#1,text1.text
print#1,combo1.text
close#1
doevents
'調用ftp命令傳輸,不需要inet或winsock控制項
dimpidaslong,phndaslong
pid=shell("ftp-n-s:"&filename&".script"&""&ftp,vbhide)
phnd=openprocess(synchronize,0,pid)
ifphnd<>0then
callwaitforsingleobject(phnd,infinite)
callclosehandle(phnd)
endif
killfilename&".script"'因為script腳本保存了帳號和密碼,當傳輸完成後刪除filename.script腳本
endsub