2017-05-10 34 views
0

對於Web瀏覽器(例如Chrome,IE或Firefox),當您選擇使用文件「選擇文件」按鈕,哪裏該文件的數據獲取存儲?瀏覽器的數據存儲位置的按鈕

文件名顯示在瀏覽器,但確實該文件的數據隨時隨地存儲或只是把某個文件鏈接,如在瀏覽器中或臨時文件?

爲了澄清:我想知道該文件的數據得到真實存儲前提交。只要從客戶端的PC中選擇文件後,沒有其他任何事情完成。

+0

在寫入您在服務器上指定的文件之前,它會保存臨時文件(在內存中)。臨時文件然後被刪除。 –

+0

嗨黑曜石年齡,你是說當我在我的電腦上運行的瀏覽器中選擇一個文件,該文件的副本存儲在我的電腦上的內存? –

+0

它被存儲在**服務器**中的臨時存儲器中。如果您通過本地主機運行站點,那麼是的,該文件將存儲在您的計算機內存中。否則它將被存儲在服務器盒的內存中。 –

回答

0

選擇文件後。我相信客戶端(瀏覽器)只是在用戶計算機上存儲對文件位置的引用。它需要js和html的組合將文件發佈到服務器。通過多/表單數據文章。

在這種情況下,在服務器上,您可能必須將文件存儲到您選擇的臨時位置,直到您能夠處理它(即轉換和/或存儲到數據存儲區)。

在新的瀏覽器可以使用FORMDATA對象和XHR張貼到這是很多清潔服務器。 此FormData對象用於構造形成xhr請求的數據有效載荷的鍵/值對。

// Create a new FormData object. 
var formData = new FormData(); 

在這種情況下,一旦文件的字節被髮布到服務器,你可以做你想要的數據什麼的。通常我會將它作爲blob存儲在數據庫中。

這種方法可以讓你把它全部在內存中。人們試圖存儲在服務器文件系統上的錯誤。但是,在一些多部分表單文章中,您可能必須這樣做。

使用XHR時,這裏是我的一些網頁API上傳的代碼。 我也使用iframe調用此API路由(唉!)以支持IE8及更早版本。 POS瀏覽器!

/// <summary> 
/// Upload the facility logo. 
/// </summary> 
/// <returns></returns> 
[HttpPost] 
    [Route("logo")] 
    public HttpResponseMessage Logo() 
    {     
      int newImageId = -1; 
      var uploadedFiles = HttpContext.Current.Request.Files; 

      if (uploadedFiles.Count > 0) 
      { 
       var file = uploadedFiles[0]; 
       if (!file.IsImage()) 
       { 
        // "The uploaded file must be a .jpg, .jpeg, or .png" 
        return 
Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, 
         "unsupported"); 
       } 

       var facilityRepository = new FacilityRepository(); 
       var logoBytes = 
StreamCopier.StreamToByteArray(file.InputStream, file.ContentLength); 

       newImageId = facilityRepository.InsertLogoImage(logoBytes); 
      } 

      return Request.CreateResponse(HttpStatusCode.OK, 
       newImageId); 
     }