5

可能没有答案,但我仍然会问,因为我在谷歌中找不到任何东西。我有一个主要使用 php 和 HTML5 创建的文件上传站点。我知道,使用 HTML5 分块系统,我可以通过检查服务器已上传的块来进行某种暂停和恢复文件上传。但它要求用户尝试上传相同的文件才能正常工作。

现在,我想知道无论如何,在用户第一次尝试上传该文件期间,获取用户完整文件路径,以便我将该路径保存到数据库中。如果发生了什么事,在网站上我可以告诉用户点击这里继续(然后因为我有文件路径,我可以自动提交,而不是要求用户再次尝试浏览该文件)。

我知道如果使用 java 我们能够做到这一点(使用签名证书),但无论如何使用更好的 php 或 javascript 或 html5 能够做到这一点。我试图避免java。或者也许任何其他语言?

注意:此文件上传适用于大量上传(从 1MB 到 4GB 的文件),到目前为止它工作得非常好。只是我正在尝试向该项目添加暂停/恢复功能。

我不介意为此购买受信任的证书或 smtg

或者无论如何,也许使用silverlight来获取文件路径,然后在我有了文件路径之后,以html形式自动提交它,让我的php处理暂停恢复功能

谢谢

4

3 回答 3

1

您可以使用 FileReader 和某种本地存储在本地存储图像并从缓存上传。我在这里使用 sessionStorage 为类似问题编写了一个示例:获取缓存图像的完整文件路径

var input = document.querySelector("#imageInput");
input.addEventListener("change", function(e){
    var reader = new FileReader();
    reader.onload = function(evt){
        var newImage = document.createElement("img");
        newImage.src = evt.target.result;
        document.querySelector("body").appendChild(newImage);
        sessionStorage.setItem("image", evt.target.result);
    };
    reader.readAsDataURL(e.target.files[0]);
}, false);

window.addEventListener("load", function(e){
    if(sessionStorage.getItem("image")){
        var newImage = document.createElement("img");
        newImage.src = sessionStorage.getItem("image");
        document.querySelector("body").appendChild(newImage);
    }
}, false);

所以你所要做的就是引用缓存的图像。

于 2013-07-01T22:32:08.680 回答
1

AFAIK,出于安全原因,浏览器永远不会让您上传文件,除非用户亲自挑选它。我的意思是他们甚至不会让您以编程方式打开浏览窗口,用户需要单击browse按钮,否则您的表单中不能有文件字段。但这都是 HTML,一旦您接受使用第三方插件,如 java applet、flash 或 silverlight,那就是另一回事了。你可以用这种方式做任何你想做的事情。

但我认为这不是一个好方法,如果是我,我会做一些不同的事情。我会通过他们的名字而不是他们的路径来提示用户上传不完整的文件。为了检查上传文件是新文件还是旧文件的恢复,我会在本地计算其MD5 签名并在实际发送文件之前发送到服务器。您还需要将所有上传文件的签名存储在服务器中,以便将来进行比较。我不确定是否可行或如何执行的部分是告诉浏览器从哪个块开始上传文件!

于 2013-07-09T03:09:16.483 回答
-2

尝试提及文件夹的路径并尝试仅在数据库中输入文件的名称,因为它不会更改路径并且还有助于上传。

做这样的事情

 D/abc/<?php $row['fieldname under which file is stored'];?>

现在文件在 abc 文件夹下的 d 驱动器中上传

于 2013-07-09T10:58:13.783 回答