1.表單上傳
最傳統的圖片上傳方式是form表單上傳,使用form表單的input[type=」file」]控制項,打開系統的文件選擇對話框,從而達到選擇文件並上傳的目的。
form表單上傳
表單上傳需要注意以下幾點:
(1).提供form表單,method必須是post。
(2).form表單的enctype必須是multipart/form-data。
javascript學習交流群:453833554
enctype 屬性規定在發送到伺服器之前應該如何對表單數據進行編碼。默認地,表單數據會編碼為 "application/x-www-form-urlencoded"。就是說,在發送到伺服器之前,所有字元都會進行編碼。HTML表單如何打包數據文件是由enctype這個屬性決定的。enctype有以下幾種取值:
application/x-www-form-urlencoded:在發送前編碼所有字元(默認)(空格被編碼為』+』,特殊字元被編碼為ASCII十六進制字元)。
multipart/form-data:不對字元編碼。在使用包含文件上傳控制項的表單時,必須使用該值。
text/plain:空格轉換為 「+」 加號,但不對特殊字元編碼。
默認enctype=application/x-www-form-urlencoded,所以表單的內容會按URL規則編碼,然後根據表單的提交方法:
method=』get』 編碼後的表單內容附加在請求連接後,
method=』post』 編碼後的表單內容作為post請求的正文內容。
㈡ 前後端分類,數據傳輸問題
目前我所知道的項目開發中,基本上都是前後端分離的。這就出現了數據傳輸的問題,前端傳給伺服器 或者 伺服器傳給前端的數據都是容易被別人竊取的。這里就要對傳輸的數據進行加解密,以保證數據安全。
下面介紹兩種前後端數據傳輸的方式
前後端約定一個key,將請求參數按照字母排序拼接成一個字元串(通常都是ASCll排序),然後拼接上key,最後用MD5或者SHA進行加密,得到一個加密的簽名sign,再把sign作為最後一個參數傳到服務端。
服務端拿到前端傳過來的結果之後,也將參數(排除sign)按照順序拼接成一個字元串,再拼接上key,再用MD5或者SHA進行加密,也得到了一個新的sign,服務端比較這兩個sign,如果相同就說明傳回來的數據沒有問題,如果不相同,說明數據被串改了。
例如:
傳遞的參數是
id=5&age=10
現在通過加簽 應該傳遞的參數為
id=5&age=10&sign=MD5(age=10&id=5)
服務端拿到的就是
id=5&age=10&sign=MD5(age=10&id=5)
服務端經過篩選參數,得到 id=5&age=10 ,然後進行排序得到 age=10&id=5 ,再MD5得到sign,兩個sign進行比較
目前我知道的根據秘鑰的使用方法,可以將密碼分為兩種
在對稱密碼中,加密、解密時使用的是同一個密鑰,我們常用的AES演算法就是對稱密碼演算法。具體AES演算法大家自己網路就好了
但是通常使用對稱密碼時,就會有秘鑰配送問題。
例:發送者A將使用對稱密碼加密過得信息發送給接收者B,只有將秘鑰發送給接收者B,B才能進行解密,這里A發送秘鑰給B的過程中,就容易被別人竊取秘鑰,別人拿著秘鑰也能進行解密。
如何解決秘鑰配送問題
我知道的幾種解決方法
公鑰密碼
公鑰密碼中,密鑰分為加密密鑰、解密密鑰2種,它們並不是同一個密鑰。
目前使用最廣泛的公鑰密碼演算法是RSA
加密密鑰,一般是公開的,因此該密鑰稱為公鑰(public key)
解密密鑰,由消息接收者自己保管的,不能公開,因此也稱為私鑰(private key)
公鑰和私鑰是一 一對應的,是不能單獨生成的,一對公鑰和密鑰統稱為密鑰對(key pair)
由公鑰加密的密文,必須使用與該公鑰對應的私鑰才能解密
由私鑰加密的密文,必須使用與該私鑰對應的公鑰才能解密
1.由消息的接收者,生成一對公鑰、私鑰
2.將公鑰發給消息的發送者
3.消息的發送者使用公鑰加密消息
混合密碼系統
不能很好地解決密鑰配送問題
加密解密速度比較慢
混合密碼系統,是將對稱密碼和公鑰密碼的優勢相結合的方法,解決了公鑰密碼速度慢的問題,並通過公鑰密碼解決了對稱密碼的密鑰配送問題
會話密鑰(session key)為本次通信隨機生成的臨時密鑰,作為對稱密碼的密鑰,用於加密信息,提高速度
發送出去的內容包括
前端A >>>>> 伺服器端B
發送過程,加密過程
接收過程,解密過程
文章參考了 猿天地的再談前後端API簽名安全? 和李明傑的底層原理iOS簽名機制
㈢ 怎麼把本地數據上傳到伺服器
1. 如何將數據上傳給伺服器
醫囑以什麼形式發送過來? 辦法有很多,最簡單的碰纖碧,就是在自己機豎模器里,建立抄2個資料庫A,B,假如A是外部伺服器。
在資料庫中,以A資料庫做發布,讓B資料庫訂閱,弄好以後,A資料庫的數據就會自動的傳送到B資料庫。具體的,你要看sql SERVER的文檔關於發布訂閱的那部分,如果細節有不懂得,你可以給我留言,我在給你解答。
在說一個方法,使用程序將A中的數據,直接插入到B資料庫。 在程序里建立兩個數據源,一個訪問A資料庫一個訪問B資料庫,然後,通過A數據源讀取數據,插入到B數據源對應的資料庫中。
2. 如何將本地資料庫 放到伺服器上
首先備份好你本地的資料庫,方法如下。
1、用APMServ5.2.6(網站上面有下載)帶的myadmin 進行備份恢復。
A、運行APMServ5.2.6, 點擊右邊的「管理MySql 資料庫」。伺服器填寫127.0.0.1:3306,
登入名稱:root,密碼為空進行登錄。在左邊是資料庫列表。點擊你的資料庫。點導出、拉到
最下面把「另存為文件」打勾。點執行。這樣你就可以備份你的資料庫了。
2、運行mySQL-Front 備份恢復你的資料庫。
A、新建一個登錄。
信息欄中隨便寫一下名字。標識你的登錄信息。
B、點擊連接欄,分別填好:
伺服器:伺服器的IP
端 口:一般為3306
C、點擊注冊欄,分別填好笑舉:
用 戶:你申請的資料庫的用戶名(如果是本地一般為root),
密 碼:資料庫的密碼(本地為空)
資料庫:你申請的資料庫名。
填寫好這些信息後點擊「確定」這樣就能鏈接到你的遠程資料庫了。左邊這個遠程數據。
伺服器的一些資料庫,點擊你的資料庫後等待鏈接。直至返回所有數據,你便能打開你的資料庫。
中的數據表了。在這里你可以修改你的數據表結構,刪除填加數據等(小心操作)。
D、右鍵點擊你的資料庫進行備份(輸出)數據,有幾種備份的類型,一般選sql。
3. 如何把本地資料庫上傳到伺服器,把做好的網站傳到伺服器
這個情況按購買的產品分析:虛擬主機空間、vps
1. 虛擬空間
一般的虛擬空間購買後,服務商都會提供相應的空間面板
登錄空間面板,文件管理那邊可以上傳站點資料
mysql這樣的通過myadmin可以上傳本地資料庫到空間上;
2. vps
付費的cpanel、plesk插件可以像上面的虛擬空間面板一樣操作
自己源碼安裝的,需要開通ftp賬戶來上傳空間資料
mysql開啟遠程功能允許本地使用mysql命令上傳到vps上。
㈣ 如何把做好的前端網頁上傳到伺服器上,讓別人可以像瀏覽百度、新浪等各大網頁一樣可以訪問得到
= =。首先你要有一個公網IP的伺服器(重要,否別人無法直接在網址上訪問你的頁面)
linux 是伺服器,用來24開機提供服務。
apache是引擎,用來提供別人訪問你的網址能有東西出來。
ftp用來把你寫的代碼上傳到linux上面去,有了這一步你的東西才能在伺服器上被別人訪問到。
只要遠程目錄上有你的東西就是上傳成功了,埠默認是21
或者你可以上網買一些虛擬主機,有二級域名可以穿透,也可以外網訪問
㈤ 前端可以直接上傳文件,不經過後台到伺服器中嗎
可以這樣子。轉為base64數據後就是一段字元串,POST上傳就好了。
但是一般不會採用這種方案,因為
1.Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(38 = 46 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的數據理論上將要比原來的大1/3,消耗流量,浪費空間。
2.你轉化為Base64之後怎麼存儲呢?存儲在資料庫嗎?那又要多支付訪問資料庫的開銷。存儲為圖片文件嗎?那又要轉換回來,也是增加了解析轉換的開銷。
3.瀏覽器的兼容問題,IE 8 以下不支持 data url,IE 8 開始支持 data url,卻有大小限制。
㈥ java web前端上傳文件到後台常用的幾種方式
1、使用form表單提交
但是這里要記得添加enctype屬性,這個屬性是指定form表單在向伺服器提交之前,對表單數據如何進行編碼。 文件域中的name="file"屬性的值,需要和後台接收的對象名一致,不然接收不到。
2、使用ajax提交文件
使用ajax提交首先引入jquery-form.js文件才能實現,接著使用上面的html代碼,加入以js則可以實現ajax提交文件。
3、使用FormData對象
4、後台接收文件,框架採用的Spring Boot 微服務框架,因為該框架搭建很方便所以採用這個框架寫例子。
㈦ 前端獲取的參數怎麼傳到service
1:最簡單的標簽
<a href="xxx.xxx?username='liufukin'">請求伺服器</a>11
2:用的最多的表單
<form action="xxx.xxx" method="post/get">
用戶名:<input type="text" name="username">
密碼:<input type="password" name="userpwd">
<input type="submit" value="提交">
</form>1234512345
3:目前最流行的ajax非同步請求
第一步:首先構造需要發送給後台的json格式數據
var sendData = {
forgetType:flag,
loginID:recevData.loginID,
contactType:contactType,
countryCode:countryCode,
areaCode:areaCode,
phone:phone,
email:email,
token:recevData.userInfo.token,
purpose:purpose,
};12345678910111234567891011
第二步:使用jQuery的ajax、load、get、post、getJSON、getScript、getHTML等方法。
$.ajax({
type:"post",
url:"ResetLoginIDorPwd.action",
data:sendData,
success:function(data){
if(isStrEmpty(data.error)){
$("#sendResult").text(sendResult);
gotoStep3();
}else{
$.alert(data.error);
gotoLoginForm();
}
},
error:function(){
$.alert("<s:text name="err.system"/>");
gotoLoginForm();
}
});
4:對於構造json格式對象的數據,有以下幾種方法
1:var data1 = new Object();
data1.username = "liufu";
data1.userpwd = "abc";
data1.age = 22;
2:var data2 = {
username:"liufu",
userpwd:"abc"
}
data2.age = 22;
data1 和data2裡面的數據是一樣的。都可以放在jquery的所有ajax請求功能的方法中的第二個參數位置。
注意:在ajax方法的第二個位置的數據必須是*json格式的對象* ,而不能夠用JSON.stringify(data1)轉化為Stri
㈧ js前台頁面與後台如何傳參
實現前端和後端的參數傳遞,其實就是前端(頁面)向伺服器發起一個請求,在請求中附帶了一些我們需要的參數。當伺服器端接收到這個請求後,通過解析得要我們要傳遞的參數,這要就達到了我們的目的了。
舉兩個例子
java我們可以通過:
request.getParameter("xxxx");//xxxx表示參數名稱來獲取請求參數名稱
C#我們可以通過:
GET請求參數用Request.QueryString,獲取POST請求參數用Request.Form
下面講下POST和GET請求的主要區別:
1、GET請求的數據會附在URL之後(就是 把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,參數之間以&相連。POST把提交的數據則放置在是HTTP包的包體中。
2、GET方式提交的數據最多隻能是1024位元組,理論上POST沒有限制。
3、POST的安全性要比GET的安全性高。安全的含義是真正的Security的含義,比如:通過GET提交數據,用戶名和密碼將明文出現在URL上,因為(1)登錄頁面有可能被瀏覽器緩存,(2)其他人查看瀏覽器的歷史紀錄,那麼 別人就可以拿到你的賬號和密碼了。
㈨ .net實現文件上傳到伺服器
1、前端界面十分簡單,只是放一個file類型的和一個按鈕,並且為這個按鈕添加點擊事件(btnUpLoad_Click),如下圖:
protectedvoidbtnUpLoad_Click(objectsender,EventArgse)
{
//取出所選文件的本地路徑
stringfullFileName=this.UpLoad.PostedFile.FileName;
//從路徑中截取出文件名
stringfileName=fullFileName.Substring(fullFileName.LastIndexOf()+1);
//限定上傳文件的格式
stringtype=fullFileName.Substring(fullFileName.LastIndexOf(.)+1);
if(type==doc||type==docx||type==xls||type==xlsx||type==ppt||type==pptx||type==pdf||type==jpg||type==bmp||type==gif||type==png||type==txt||type==zip||type==rar)
{
//將文件保存在伺服器中根目錄下的files文件夾中
stringsaveFileName=Server.MapPath(/files)++fileName;
UpLoad.PostedFile.SaveAs(saveFileName);
Page.ClientScript.RegisterStartupScript(Page.GetType(),message,<scriptlanguage='javascript'defer>alert('文件上傳成功!');</script>);
//向資料庫中存儲相應通知的附件的目錄
BLL.news.InsertAnnexBLLinsertAnnex=newBLL.news.InsertAnnexBLL();
AnnexEntityannex=newAnnexEntity();//創建附件的實體
annex.AnnexName=fileName;//附件名
annex.AnnexContent=saveFileName;//附件的存儲路徑
annex.NoticeId=noticeId;//附件所屬「通知」的ID在這里為已知
insertAnnex.InsertAnnex(annex);//將實體存入資料庫(其實就是講實體的這些屬性insert到資料庫中的過程,具體BLL層和DAL層的代碼這里不再多說)
}
else
{
Page.ClientScript.RegisterStartupScript(Page.GetType(),message,<scriptlanguage='javascript'defer>alert('請選擇正確的格式');</script>);
}
}