-1

可以通过“普通网络浏览器”通过 PUT 方法上传文件,甚至是二进制文件或文本文件。为什么很多人都在说,那不可能?

带有 jQ​​uery 和 PHP 的示例代码。

$(document).ready(function() {
    $("#uploadbutton").click(function() {
        var filename = $("#file").val();
        $.ajax({ 
        type: "PUT",
        url: "addFile.do",
           enctype: 'multipart/form-data',
           data: {file: filename},
          success: function(){
               alert( "Data Uploaded: ");
            }
        });     
    });
});

在服务器端,只需读取 STDIN 流,如

<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");

/* Open a file for writing */
$fp = fopen("myputfile.ext", "w");

/* Read the data 1 KB at a time
   and write to the file */
while ($data = fread($putdata, 1024))
  fwrite($fp, $data);

/* Close the streams */
fclose($fp);
fclose($putdata);
?>
4

2 回答 2

0

特别是对于您的解决方案,主要是因为PUT并非所有浏览器都支持该方法(动词),尤其是较旧的浏览器,因此该解决方案不适用于所有人。

该主题之前也出现过,虽然不完全相同,但一些答案是在哪里工作PUTDELETE不工作的例子。

的文档$.ajax()也提到了这一点

type
默认值:'GET'
请求的类型(“POST”或“GET”),默认为“GET”。

注意:这里也可以使用其他 HTTP 请求方法,例如 PUT 和 DELETE,但并非所有浏览器都支持。

于 2010-10-03T11:30:48.450 回答
0
{file: filename}

上传文件时,您必须上传文件。告诉服务器本地文件名是什么……是不够的。

JavaScript 在标准安全上下文中的 Web 浏览器中运行,无权从用户硬盘读取文件中的数据。

由于您无法获取数据,因此无法上传。

于 2010-10-03T11:35:50.760 回答