今天發(fā)布文章時,在上傳圖片的時候出現(xiàn)了一個錯誤,錯誤信息是“錯誤原因:未知錯誤”。
zblog上傳文件失敗
一開始我以為是圖片格式不對,仔細看了之后,確實是jpg文件,一向都沒有問題的。隨后我又隨便找了一張jpg的圖片來上傳,是沒有問題的。
我認為可能是圖片損壞了導(dǎo)致上傳不了,于是把上傳失敗的圖片用Fireworks打開,然后保存,再次上傳,竟然成功了。
圖片上傳失敗的真正原因
我之后在網(wǎng)上看看zblog圖片上傳失敗的各種可能原因,其中一種說到的是圖片大小的問題,我然后把剛才自己處理過的圖片和未處理前進行比較,確實,在體積上較少了很多,因為在Fireworks保存時默認的是“JPEG-較高品質(zhì)”,原圖是“高品質(zhì)”。
▲原圖:品質(zhì)100 大小434.54K
▲處理后:品質(zhì)80 大小144.22K
卡卡網(wǎng)圖片壓縮優(yōu)化工具,可以把圖片大小無損壓縮75%以上,這將大大減少網(wǎng)頁的打開時間。
zblog設(shè)置上傳文件的最大字節(jié)數(shù)
以前我沒怎么注意,原來zblog是可以設(shè)置上傳文件的最大字節(jié)數(shù)的,位置在“網(wǎng)站設(shè)置管理”-“全局設(shè)置”標(biāo)簽頁,默認值是10485760,等于10M。(小知識:在這個標(biāo)簽頁還可設(shè)置限制上傳文件格式)
為什么文件大小沒有超過zblog設(shè)置值也不能上傳呢?根本原因是在Windows2003中ASP上傳的附件大小的限制為200K。這個問題就涉及到服務(wù)器系統(tǒng)設(shè)置的問題了。
如果你有服務(wù)器的管理權(quán)限,那么可以更改win2003的IIS 6.0對asp的上傳文件大小為200k限制,否則使用zblog最大是不可能上傳超過200K的文件的。
在IIS6.0中,默認設(shè)置是特別嚴(yán)格和安全的,最大只能傳送 204,800 個字節(jié),這樣可以最大限度地減少因以前太寬松的超時和限制而造成的攻擊。IIS 6 出于安全考慮, 默認最大請求是200K(也即最大提交數(shù)據(jù)限額為200KByte,204800Byte)。(在 IIS 6.0 之前的版本中無此限制)。要解決這個問題,請按下面的方法進行:
1、在Internet 信息服務(wù)(IIS)管理器中使所有的網(wǎng)站(包括FTP服務(wù)器)都停止運行;
2、在開始->管理工具->服務(wù),在服務(wù)里關(guān)閉iis admin service服務(wù); (如何停止IIS服務(wù)?)
3、找到C:\WINDOWS\system32\inetsrv下的metabase.xml, 打開,找到ASPMaxRequestEntityAllowed 把它修改為你需要的值(以字節(jié)為單位)(默認為204800,即200K);大概1MB對應(yīng)1024000,10MB對應(yīng)10240000,依此類推。 (查看單位換算公式)
4、在開始->管理工具->服務(wù),然后重啟iis admin service服務(wù)。
這樣就可以在zblog上傳大于200K的文件了。
更改上傳大小限制的vbs腳本
如下是一個更改上傳大小限制的vbs腳本,可以不用重啟iis服務(wù)就可以生效的。把這段代碼復(fù)制到記事本里然后保存為:win2003-200K.vbs,看好了擴展名為.vbs。
Set providerObj=GetObject("winmgmts:/root/MicrosoftIISv2")
Set vdirObj=providerObj.Get("IIsWebServiceSetting='W3SVC'")
WScript.Echo "Before: " & vdirObj.AspMaxRequestEntityAllowed
vdirObj.AspMaxRequestEntityAllowed=20480000 '可接收多大字節(jié),此處默認為:204800即:200K
vdirObj.Put_()
WScript.Echo "Now: " & vdirObj.AspMaxRequestEntityAllowed
如果你的系統(tǒng)做過安全設(shè)置,運行時可能會出錯,請使用直接修改配置文件。