当前位置: 首页 > 知识库问答 >
问题:

Php将文件发布到ServiceStack API

苏昂雄
2023-03-14

我需要帮助张贴一个文件(doc,Docx,或pdf)到一个ServiceStack API使用PHP。

php卷曲设置:

$curl = curl_init();
$cfile = new CURLFile('C:\\test.doc');
$params = array('Data' => $cfile);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS,$params);

API设置:

 public object Any([FromBody]ExampleRequest exampleRequest){
...
}

public class ExampleRequest : IReturn<ExampleResponse>
    {
        public object Data { get; set; }
    }

使用ExampleRequest内部名为object类型的Data的属性

我不确定为什么数据总是空的。 如有任何帮助,将不胜感激

共有1个答案

牟波
2023-03-14

[FromBody]不是ServiceStack属性,在ServiceStack服务中无效。

您的类型化请求DTO只需与ExampleRequest的模式匹配即可。 所有ServiceStack服务都可以通过QueryString,FormData或通过请求主体填充,这些内容类型都是默认注册的,比如JSON。 您需要确保请求发送的格式正确,与content-typeHTTP请求头匹配。

建议您永远不要使用object,否则需要考虑反序列化object类型的自定义序列化行为和安全限制。

通过定义Data属性,您将告诉ServiceStack接受具有以下数据属性的请求(例如JSON):

{"Data": ...}

如果发送平面键/值对,请考虑使用dictionary 而不是object

您的请求DTO应该指定架构的类型,如果您不想这样做,您可以告诉ServiceStack跳过请求主体的反序列化,并通过让您的请求DTO实现IRequiresRequestStream来让您的服务解析原始请求主体,例如:

//Request DTO
public class ExampleRequest : IRequiresRequestStream
{
    Stream RequestStream { get; set; }
}

实施:

public object Any(ExampleRequest request)
{
    byte[] bytes = request.RequestStream.ReadFully();
    string text = bytes.FromUtf8Bytes(); //if text was sent
}
 类似资料:
  • 发布到DynamoDB,以便用户登录。 致命错误:未捕获的异常'Aws\DynamoDb\Exception\DynamoDbException',带有消息'在“https://dynamodb.us-east-1.amazonaws.com”上执行“GetItem”时出错;AWS HTTP错误:客户端错误:导致响应:{"__type":"com.amazon.coral.validate#Val

  • 问题内容: 因此,这源于昨天的一个问题,由于错误不寻常,该问题迅速失控。这个问题仍然存在,但是这里的问题被搁置了,我被要求改革一个新问题,该问题现在与当前问题有关。所以我们开始。 这个问题本质上是基本的。如果您昨天在帮忙,我已经从$ .post切换到$ .ajax帖子,以将变量传递到我的文件中。但是,我的文件似乎从未收到此变量,表明索引为“未定义”。 现在,这通常意味着该变量不包含任何值,命名错误

  • 嗨,我需要找到一个教程,将告诉我如何从我正在建设的PHP mysql网站发布信用卡信息。 信用卡处理器希望数据在一个jason文件中,所以我需要学习如何将数据编码到一个jason文件,然后发布到他们的应用编程接口。 编码很简单,但是没有关于如何从我的php文件将jason文件发布到API的信息。 谁能给我指一下正确的方向吗。这是我第一次在网上找不到“如何”的答案。 谢了Jon

  • 我向PHP文件中发布了一个对象,问题是,我没有像在表单中那样使用name=“”,而是发布了一个对象,看: 问题是,PHP将如何解决发布的参数? 额外的问题:以JSON格式发送发布的数据很重要吗?在使用fetch API时,这样做很重要吗?

  • 我对使用ajax-jquery将php数组发送到另一个php文件有疑问,如果我们使用一些输入类型隐藏值通过jquery post发送php数组,这是将数组转换为字符串。所以另一个php文件没有接收数组值,而是接收字符串。我知道php的爆炸内爆功能。但是在codeiginter中,给定的数组是不同的 我使用输入类型隐藏示例代码发送此数组 我的 jquery-ajax 代码 在这个数组中。我如何使用爆

  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 问题内容: 我试图在此处修改@BalusC优秀教程,以发送gzip压缩文件。这是一个有效的java类: 您必须编辑和字段,并在URL中设置一个servlet-其方法是: 现在,当field设置为true时,FILENAME会被正确压缩并发送到服务器,但是当我尝试将其提取时,它已损坏(我在Windows上使用7z,它将打开gzip文件作为存档,但是当我尝试将文件提取到 内部时 , gzip归档文件说

  • 问题内容: 我有一个简单的php文件,它可以解码我的json字符串,并与ajax一起传递并标记结果,但是我不能保留变量,为什么? 我尝试使用fireBug进行检查,我可以看到POST请求已正确发送,当调用 php 脚本时,他对我做出了Noooooooob的响应,似乎已设置了任何POST变量。 我想要的就是拥有我的数组=) JSON字符串由生成: 的JavaScript save_categorie