項目中遇到DWZ文件上傳相關問題,所以記錄下,至於時間相關的問題經常遇到,特此也做下記錄。
DWZ文件上傳
首先是.html文件中,應有表單提交上傳文件。如下圖代碼,使用聯動文本框顯示文件名,點擊保存按鈕時提交表單。
注意οnsubmit=”return iframeCallback(this);”此處應使用iframeCallback(this)無刷新的表單提交,若是變成validateCallback(this,navTabAjaxDone)則會提示上傳失敗。
還有就是要注意enctype=”multipart/form-data”不要忘了寫。
<form class="pageForm required-validate" onsubmit="return iframeCallback(this);"
method="post" enctype="multipart/form-data"
action="url" name="form1" novalidate="novalidate">
<tr>
<td class="L001">上傳文件: </td>
<td class="L002">
<input type="file" name="fileLocal" onchange="localFileOnChange(this)"/>
<input type="text" id="fileName" name="fileName" style="width:300px"}/>
</td>
</tr>
<button type="submit">保存</button>
<button type="button" class="close">關閉</button>
<script type="text/javascript">
// 用戶選擇文件, 觸發文件名文本框變動
function localFileOnChange(sender){
$("#fileName").attr("value","");
fn = sender.value.split(/\\|\//)
$("#fileName").val(fn[fn.length-1]);
}
</script>
到controllers層,接收到相關信息,然後確定文件保存的目錄以及文件的命名。首先要根據os.MkdirAll方法創建目錄,然後調用SaveToFile方法保存文件(SaveToFile方法的第一個參數爲type=”file”的input的name,第二個參數爲文件的包含文件名的保存路徑)。
fileName := this.GetString("fileName")
dir := fmt.Sprintf("/upload/") //創建目錄
fnSplits := strings.Split(fileName, ".")//分割文件名123.png:123,png
// 創建文件夾
err := os.MkdirAll("./static"+dir, 0755)
//保存(上傳)文件
err = this.SaveToFile("fileLocal", "./static"+dir+fileName)
time轉化
主要是調用DWZ的時間控件之後,要將string類型的時間轉爲int64類型保存在數據庫中。.html中DWZ自帶的時間控件如下。
<input type="text" readonly="readonly" maxdate="%y-%M-{%d+90}" mindate="{%y}-%M-%d" datefmt="yyyy-MM-dd" name="deadline" class="required date textInput readonly valid">
到controllers層,接收到相關信息,然後把string類型轉化爲int64類型。
deadline := util.StringDate2Int64("2006-01-02", this.GetString("deadline"))
其中調用的util中的StringDate2Int64方法具體如下:
// 轉化字符串類型日誌爲int64
func StringDate2Int64(layout, value string) int64 {
if value == "" {
return 0
}
t, err := time.Parse(layout, value)
if err != nil {
return 0
}
return t.UnixNano() / 1e6
}
小結
以上就是大概的內容,其實挺簡單的。由於個人的知識淺薄,所以下面補充一下html中一些需要注意的地方吧。
補充
<td>
{{if eq .Status 1}}<font color="red">待審覈</font>
{{else if eq .Status 2}}<font color="green">發佈中</font>
{{end}}
</td>
<td>{{dateformat .UpTime "2006-01-02 15:04:05"}}</td>
<input type="radio" value="1" name="prioity" id="radioType1" {{if eq .pro.Prioity 1}} checked="checked"{{end}}/>
第一個是判斷已知條件來顯示不同的視圖;第二個是規範顯示time.Time類型的時間;第三個是根據條件判斷該控件的狀態。