1

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

我正在尝试简化一些 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”文件上升,占位符和边界正确,只是文件大小爆炸并损坏。

任何帮助,将不胜感激

麦克风

4

1 回答 1

0

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

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 脚本中运行的。但它可以工作。

多谢你们

麦克风

于 2013-05-06T01:41:44.173 回答