【问题标题】:jquery / php and File uploads to remote sitejquery / php 和文件上传到远程站点
【发布时间】:2013-04-03 09:38:59
【问题描述】:

这是我的第一篇文章,所以请温柔。

我正在尝试简化一些 B2B,但我们的供应商没有提供帮助,因此我正在尝试使用他们的标准 Web 控件和我这边的用户通过浏览器单击来创建一个界面。

远程服务器有一些很好的安全协议,所以 curl 是不可能的。我可以让远程服务器接受我的文件的唯一方法是通过 Web 浏览器使用他们的 cookie 创建界面。这不是一件坏事,因为我希望工作人员在文件发布之前查看它。

当我使用 Fiddler 并通过他们的网站上传内容长度时,文件大小为 55344,文件大小为 54920,所以这是正确的......但是当我通过 Java/PHP/jquery 进行上传时,它们都是大小约为 99870。

如果我上传一个文本文件,这工作正常。

如果我上传 PDF 或 Word 文档,文件大小会过大并损坏。

我尝试通过 PHP 创建发布数据,而 jquery 有一个 tanty 并且不会发送,我已经在 PHP 和 Java 之间编码和解码 base 64.. 文件大小爆炸

我已经在谷歌上搜索了几天,但运气不佳。为什么会这样?

这是我的 JavaScript 代码:

    var boundary = "' . $boundary . '";

    var jqxhr = $.ajax({
        type: "GET",
        url: "' . $filename . '",
        context: document.pdf,
        global: false,
        async:false,
        success: function(data) {
            return data;
        }
    }).responseText;


var javabody = "--" + boundary + "\r\n"
        + "Content-Disposition: form-data; name=\"' .$name. '\"; filename=\"' .$filename. '\"\r\n"
        + "Content-Type: application/pdf\r\n\r\n"
        + jqxhr + "\r\n"
        + "--" + boundary + "\r\n"
        + "Content-Disposition: form-data; name=\"attachDocument\"" + "\r\n\r\n"
        + "Attach Docs\r\n"
        + "--" + boundary + "--";

    $.ajax({
            type: "post",
            url: "' . $url . '",
            datatype: "html",
            contentType: "multipart/form-data; boundary=' . $boundary . '",
            cache: "false",
            context: document.body,
            global: "false",
            data: javabody,
            crossDomain: true,
            xhrFields: {
                    withCredentials: true
                    },
            processData: false,
            async: false,
            });

一切正常,'a' 文件上升,占位符和边界正确,只是文件大小爆炸并损坏。

任何帮助将不胜感激

迈克

【问题讨论】:

  • 你可以访问远程服务器吗?
  • 我唯一的访问权限是通过 Web 界面,它看起来像一个 tomcat 服务器
  • 是否启用了 FTP?我认为将文件发送到本地服务器会更容易,做需要的逻辑,打开ftp协议,然后放文件。
  • 我也希望如此,但我们与这些人的唯一界面是 Web 界面。一年多来,我们一直在尝试从这些人那里获得 API,但都没有运气。我们每周上传 1000 份文件,如报价单、发票等。所以这对于我们的日期输入工作人员来说将是一个真正的节省时间。我对需要在网站上发布的笔记做了类似的事情,这只是最后一个瓶颈。

标签: php jquery file upload


【解决方案1】:

在头脑风暴和搜索这个网站直到我的手指流血之后,我想出了一个解决方案:

function submitQuoteSupportingDoc() {
    //add the binary file contents to the object, can only submit file contents via post if binary blob is present
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "' . $filename . '", true);
    xhr.responseType = "blob";
    xhr.onload = function(e) {
            if (this.status == 200) {
                    var myBlob = this.response;
                    var fd = new FormData();
                    fd.append("attachFile", myBlob, "' . $FileForUpload . '" );
                    fd.append("attachDocument", "Attach Docs");
                    $.ajax({
                        type: "POST",
                        url: "' . $DocumentUrl . '",
                        data: fd,
                        async: false,
                        crossDomain: true,
                            xhrFields: {
                                    withCredentials: true
                                    },
                        processData: false,
                        contentType: false
                    }).done(function(data) {
                           console.log(data);
                    });
                    close();
                    }
    };
    xhr.send();
I}

显然这是在 PHP 脚本中运行的。但它可以工作。

谢谢大家

迈克

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多