【发布时间】:2021-05-21 15:43:12
【问题描述】:
我正在尝试使用 javascript formData 对象上传文件。
var formData = new FormData(form[0]);
formData.append('attachments[]',
localStorage.getItem('file_content'));
$.ajax({
url: form[0].action,
type: "POST",
enctype: 'multipart/form-data',
processData: false,
contentType: false,
cache: false,
data: formData,
success: function(response){
console.log(response);
}
});
因此,本地存储“file_content”具有 blob 格式的文件内容。上面的代码有效,但问题是文件内容是作为 $_POST 变量提交的。我希望文件被提交并在 $_FILES 服务器变量中可用。有没有可能做到这一点。请帮忙。
【问题讨论】:
-
阅读this。你不能序列化一个文件对象。
-
将 blob 转换为 base64,如果您想通过 ajax 发送它。另一种情况是简单创建一个表单直接上传,无需本地存储(除非有必要)这两种情况对你发送的内容都有限制。
-
@gmastro 转换为 base64 将使其在 $_FILES 中可用?出于安全考虑,表单文件输入不允许以编程方式更改值。
-
@Akhilesh 检查您的 POST 请求。 1) 在浏览器上打开控制台,查看
attachment[]参数是否在您的请求数据中 2) 添加一个服务器端转储,它将回显请求内容 $_POST。如果没记错的话,$_FILES superglobal via ajax 上几乎没有任何数据没有attachments[]参数,那么请检查MDN USVString、Blob 和FileReader 以及如何将数据转换为FormData 可接受的格式。此外,始终尝试最简单的方法。直接发送帖子,而不是通过 ajax。当你拥有它时,使用 file_put_contents 或 Symphony 提供的任何东西。
标签: javascript php symfony4