gpt4 book ai didi

php - 我应该如何编写接收文件的 Web API?

转载 作者:行者123 更新时间:2023-11-28 02:39:36 33 4
gpt4 key购买 nike

我正在尝试创建一个 Web API,允许某人(最好是一个程序)提交一个大型二进制文件并接收该文件的 ID 作为返回。我有一些带有表单( method="POST" )和 <input type="file" ...> 的 HTML可以使用标准 multipart/form-data MIME 类型将文件提交给某些 PHP 代码的元素。 PHP 生成 ID 并将其作为结果打印出来。因为 PHP 只是打印 ID,而不是重定向到另一个 HTML 页面或生成 HTML 本身,所以它不是很漂亮,但希望足以满足编程文件提交 API 的预期用例。

到目前为止,一切都很好。当我想让客户端代码捕获返回的 ID 并用它调用其他 API 时,这会变得很棘手。如果客户端是一个带有JavaScript的网页,那么客户端似乎应该使用XMLHttpRequest ,但我不清楚如何让该对象使用用户通过文件输入控件选择的文件。

我希望相同的 API 能够同时用于手动操作的 Web 表单(以便于 UI 和测试)和纯编程调用(例如使用 JavaScript、curl/libcurl 等)。我不希望 PHP 使用查询字符串中的 ID 发出重定向到另一个页面的请求,并且我不想直接返回 HTML。我只想要一个简单的文件输入、ID 输出 API。

由于事实证明这很困难,我怀疑我处理问题的方式是错误的。我对替代设计持开放态度,但我更愿意让事情尽可能简单。我发现了一个有点similar question ,但它过于以 Java 为中心,并不能完全解决我的问题。

最佳答案

我必须做类似的事情,而我最终所做的是将表单提交到隐藏的 iframe。然后可以在 iframe onload 处理程序中简单地检索来自 php 的响应。

事实上,这是我使用的代码:

    $('submitdestination').onload=function(){
var appID=this.contentDocument.body.children[0].innerHTML;
//did something with appID
new mBox.Notice({type: 'ok',delayClose: 1000,content: 'Data saved.',position: {y: 'bottom',x: 'right'}});//displayed message
}
$('cvdetails').submit();

注意:submitdestination 是我的 iframe。 cvdetails 是我的表单。表单的目标设置为submitdestination。另外,我正在使用 Mootools,以防有人注意到我的美元参数中缺少哈希值。

这是我使用的 HTML 的精简版本(尽管 iframe 未更改):

<form id="cvdetails" name="cvdetails" action="scripts/upload.php" method="post" enctype="multipart/form-data" target="submitdestination" autocomplete="off">
<button type="button" id="save" class="mainbutton">Save</button>
</form>
<iframe id="submitdestination" name="submitdestination" style="display:none" ></iframe>

保存按钮有一个点击处理程序,可以简化为:

$('save').addEvent('click',function(evt){evt.stop();$('cvdetails').submit();})

关于php - 我应该如何编写接收文件的 Web API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890203/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com