“选择文件”按钮的浏览器数据存储位置

时间:2017-05-10 21:32:55

标签: file browser

对于网络浏览器(例如Chrome,IE或Firefox),当您使用“选择文件”按钮选择文件时,文件的数据存储在何处?

文件名显示在浏览器中,但文件的数据是否存储在任何地方,或者只是放在某处的文件的链接,例如在浏览器或临时文件中?

澄清一下:我想知道在提交之前文件的数据存储在哪里。从客户端的PC中选择文件后,其他任何事情都没有完成。

1 个答案:

答案 0 :(得分:0)

选择文件后。我相信客户端(浏览器)只是存储对用户计算机上文件位置的引用。它需要js和html的组合才能将文件发布到服务器。通过Multi / form-data Post。

在这种情况下,在服务器上,您可能必须将文件存储到您选择的临时位置,直到您能够处理它(即转换和/或存储到数据存储区)。

在较新的浏览器中,您可以使用FormData对象和xhr发布到更清洁的服务器。 此FormData对象用于构造键/值对,这些键/值对构成xhr请求的数据有效负载。

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

在这种情况下,一旦将文件字节发布到服务器,您就可以使用该数据执行任何操作。通常我会将它作为blob存储在DB中。

这种方法可以让你把它全部留在内存中。人们犯了试图存储在服务器文件系统上的错误。但是,在某些多部分表单中,您可能必须这样做。

使用XHR时,这是我的一些web 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);
        }