如何使用javascript上传文件到FTP服务器?

问题描述 投票:0回答:2

举个最小的例子,我有
主机:111.222.111.123
用户名:用户名
密码:pass_word
使用 HTML

input
元素

选择要上传的文件

我可以使用 FileZilla 这样的客户端手动将文件上传到服务器上的目标目录。

目标目录是文件要上传的位置。它在互联网上的位置是

https://nameofsite/targetdir/
,因此任何人都应该可以通过互联网访问该文件,因为
https://nameofsite/targetdir/1.html

但是可以用javascript将文件上传到服务器吗?
我尝试了这个例子考虑了@mcrdy455的答案,但无论如何不清楚

FtpConnection
是什么:

<input id="fileForUpload" type=file onchange="upload()">
<div id="fileContents"></div>
  
<script>
function upload() {
    var file = document.getElementById("fileForUpload").files[0];
    if (file) {
        var reader = new FileReader();
        reader.readAsText(file, "UTF-8");
        reader.onload = function (evt) {
            document.getElementById("fileContents").innerHTML = evt.target.result;
            
            var ftp = new FtpConnection("ftp://111.222.111.123/");
            ftp.login("user_name", "pass_word");
            ftp.put(file, "1.html");
            ftp.close();
            file.close();
        }
    }
}
</script>

未捕获的引用错误:FtpConnection 未定义

在网上查了一下,还是不知道

FtpConnection
属于哪个项目。其他示例使用 URL 而不是 IP 地址 (111.222.111.123)。
例如。
Ftp.createCORSRequest('POST', "http://www.ftpjs.xyz/upload.aspx")
这个。我不想让事情变得复杂(使用 CORS)并使用 111.222.111.123 地址。

如果 FileZilla 可以完成这项工作,为什么 javascript 不能完成呢?怎么办?

javascript file-upload ftp
2个回答
1
投票

JavaScript 代码无法从文件系统访问文件、使用输入类型文件并通过 FileReader 读取文件:您可以在此处了解有关如何执行此操作的更多信息,一旦您拥有正确的文件/blob 对象,您就可以代码应该可以工作


0
投票

您的示例和第一个链接适用于 Adobe 脚本。不适用于浏览器相关用途。查看您链接的问题中的链接“文档(pdf)”指向何处。应该在该问题中说明,或者至少标记为 Adobe 问题。您的第二个链接是使用 ftpjs 服务器的方法,它代理连接。使用.NET 库。 http://ftpjs.xyz/ 已关闭,最后一次 archive.org 捕获是 2016 年。它可能已被移动,或者您可以自己设置,但这不是独立的 JS FTP 客户端解决方案。

问题的另一部分我没有答案。如何做到,或者是否可能。

有趣的是,有一个通过 XHR 进行 FTP 的想法或计划。
此声明一直存在于 MDN Web 文档中,直到 2019 年被删除。

尽管它的名字如此,XMLHttpRequest 可用于检索任何类型的 数据,不仅仅是 XML,并且它支持除 HTTP 之外的协议 (包括文件和ftp)。

https://web.archive.org/web/20190109002150/https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

这里还有一些想法https://copyprogramming.com/howto/implementing-ftp-using-javascript

上面链接的作者总结道,这是不可能的,因为我们无法在浏览器的 JS 中打开侦听 TCP 套接字。

但在被动模式下不需要。
如果来自浏览器中运行的 JS 的 FTP 连接,或者作为浏览器的 WebExtension 不可能、不允许,或者只是没有被某人实现为库,我没有找到明确的答案。

有 Node.JS 的实现。

© www.soinside.com 2019 - 2024. All rights reserved.