如何在浏览器缓存中的JavaScript上传文件?

时间:2017-09-18 12:13:07

标签: javascript php image google-chrome upload

我正在修复,因为我必须将已放入 DIV 小部件(Google Chrome)的文件放到服务器位置。我可以在新窗口中看到在浏览器缓存中创建的文件:

    var image = new Image();

    getBlobFromURL(blobURL).then(fromBlobToBase64).then(function(result) {
        image.src = result;

        var headerImageLocation = //'../Appbilder/Startseite/' +
            seldomID() + '.' + getFileExtension(result);
        var w = window.open('');

        w.document.write(image.outerHTML);

        fileUpload(image.outerHTML);
        …
    };

虽然图片在那里,但我无法使用我在网上找到的以下功能上传它:

function fileUpload(file) {
    var url = server.ServiceTest + 'images/';   // 'http://app.ivm.at/ServiceTest/images/
    var xhr = new XMLHttpRequest();

    xhr.open('POST', url);
    var formData = new FormData();

    formData.append('uploadfile', file);

    xhr.send(formData);
}

我需要抓取可见文件并将其发送到特定服务器位置。 Web页面的代码位于名为 ./ Backend 的某个位置,图像应该转到 ./ Backend / images 位置。我错了什么?在发送文件之前,我是否必须首先在本地写入文件?我使用 xhr.open 发送的网址是我希望上传文件的位置。

编辑1: 我想用PHP代码保存文件。这是对的:

$formData = $_POST['formData'];

$fp = fopen($formData.filename, "w");

fwrite($fp, $formData.file);

fclose($fp);

编辑2:

我稍微修改了代码如下,因为我必须在等待时尝试找到解决方案:

fileUpload(image.src, headerImageLocation, url);

该方法现在看起来像这样:

function fileUpload(file, fileName, url) {
    var functionName = logging.createFunctionName('fileUpload', file, fileName, url);
    var xhr = new XMLHttpRequest();    // den AJAX Request anlegen

    messages.print(functionName, 'called');
    xhr.open('POST', url);
    var formData = new FormData();

    formData.append('filename', fileName);  // Anhängen der Datei an das Objekt
    formData.append('file', file);  // Anhängen der Datei an das Objekt

    xhr.send(formData);
};

在服务器端,我创建了一个名为' filename'的文件。其中包含四个字母:' file'。所以,我们正在接近。我需要的是文件名&传递真实内容,以便我在服务器端(如01237.png)获得一个正确的内容。

编辑3 :为了找到我的问题的解决方案,我删除了 FormData 对象,因为我无法使用PHP访问它的内容。我现在在C / S端使用以下代码:

function fileUpload(file, fileName, url) {
    var functionName = logging.createFunctionName('fileUpload', file, fileName, url);
    var xhr = new XMLHttpRequest();    // den AJAX Request anlegen

    messages.print(functionName, 'called');
    xhr.open('POST', url);
    var data = { name: fileName, image: file};

    xhr.send(data);
};

在服务器端,我使用以下PHP代码访问数据:

$json = $_POST['data'];

$data = json_decode($json, true);

// Only proceed if we got valid input
if ($data !== null) {
    //$fp = fopen('filename', "w");
    $fp = fopen($data->name, "w");

    fwrite($fp, $data->image);
    //fwrite($fp, 'image');

    fclose($fp);
} else {
    $result = 'Nothing posted';
}

die(json_encode($result));

我留下了两条注释行,这些行会创建一个名为' filename'内容'图像'。未注释的部分既不会出错,也不会在当前目录中创建任何内容。

到目前为止,我所有的服务器访问都是使用调用数据库的PHP代码。我正在编写第一个尝试在服务器端直接创建文件的服务。

0 个答案:

没有答案