2012-04-30 57 views
0

我看到很多人想出了一些過多的方法來改變文件夾的位置與flajaxian多個文件上傳控制。Flajaxian自定義文件夾保存位置

只是想知道更多的經驗可以看我的方式,讓我知道是否有任何我應該關注的重大問題。 (假設我有適當的錯誤檢查到位)。

我計劃初始化控件,如下所示。 :

<cc1:FileUploader ID="FileUploader1" runat="server" OnFileReceived="fileUploader_FileReceived" RequestAsPostBack="true"> 

    </cc1:FileUploader> 

(我RequestAsPostBack="true"因爲有我需要在我的事件處理程序檢查一些其他控件)

我只是更改fileUploader_FileReceived eventHttpFileCollection.SaveAs財產。由於flajaxian一次只能上傳一個文件,因此我們可以預期集合中只有一個文件(否則我們可以使用循環)。

protected void fileUploader_FileReceived(object sender, 
com.flajaxian.FileReceivedEventArgs e) 
{ 

     HttpFileCollection files = Request.Files; 
     // Change path to whichever folder I need 
     String TempFileName = "C:\\NEW\\PATH\\TO\\Folder\\" + files[0].FileName; 
     // Save the file. 
     files[0].SaveAs(TempFileName); 
} 

只要文件夾已存在,此實現似乎很有效!我只是想知道是否有什麼technically這樣的實現錯誤,再次假設所有錯誤檢查都已到位。

謝謝!

回答

0

更好的方法是使用適配器,然後在 OnFileNameDetermining事件中寫入文件夾位置。這樣,我們也可以通過適配器獲得所有的好處。

<cc1:FileUploader ID="FileUploader1" runat="server"` OnFileReceived="fileUploader_FileReceived" RequestAsPostBack="true"> 
      <Adapters> 
       <cc1:FileSaverAdapter runat="server" FolderName="Ups" OnFileNameDetermining="fileUploader_FileDetermined" /> 
      </Adapters> 
</cc1:FileUploader> 

在該文件中確定的事件中,我們可以更改文件夾位置編程

protected void fileUploader_FileDetermined(object sender, com.flajaxian.FileNameDeterminingEventArgs e) 
{ 
    e.FileName = "C:\\NewFolder\\" + e.File.FileName; 
} 

我們可以使用FileReceived事件來檢查,如果該文件夾存在,如果沒有,創建它。

protected void fileUploader_FileReceived(object sender, com.flajaxian.FileReceivedEventArgs e) 
{ 
    int fileIndex = e.Index; 
    if (fileIndex == 0) 
    { 
     // We are on our first file, check if the new folder exists, if not, create it 
    } 
} 
0

你在做什麼是好的,但是,如果你在網站內保存文件,可以考慮使用MapPath方法在網站內創建一個虛擬路徑中的物理文件夾

MapPath("/Images/User1") 

這是我的最小APSX實現

<fjx:FileUploader ID="FileUploader1" runat="server" OnFileReceived="FileUploader2_FileReceived"> 
</fjx:FileUploader> 

沒有指定適配器或文件夾。當FileRecevied事件觸發時,我將文件保存到基於表單身份驗證用戶名的文件夾中(名稱不使用文件夾名稱中不允許的字符)。

還要注意的是FileReceivedEventArgs有一個參考(HTTP)文件

e.File 

的FileUploader控制將顯示所有文件處理 - 你甚至可以設置狀態代碼(例如550),如果有一個錯誤,它被返回給客戶端。

需要注意的是,即使你指定

RequestAsPostBack="true" 

因此,服務器調用FileReceived事件沒有一個nornal網頁提交內部產生,一個PagePreRender不會發生。

唯一的問題是,如何在上傳完成後在客戶端執行任何其他處理(例如,顯示上傳的圖像)。

工作,我有進步,爲此是使用客戶端事件

FileStateChanged 

當最後一個文件處理

if (file.state > Flajaxian.File_Uploading && isLast) { 

使用jQuery點擊一個隱藏的提交按鈕。回發看起來通過保存文件時存儲的會話值,並將圖像渲染回DIV。

但是,由於某種原因(我假設因爲內部異步回調尚未完成),立即提交會導致FileReceived事件內的空會話出現問題。啓動回發之前暫停幾秒鐘即可正常工作。