我正在尝试通过API REST将文档(任何文件类型)发布到GLPI服务器。
这是我在做什么:
private void button11_Click(object sender, EventArgs e)
{
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
var rcontent = string.Empty;
// HEADERS (URL + Access Tokens)
//string _ContentType = "multipart/form-data";
string _Uri = Properties.Settings.Default.GLPI_URL + "/Document/";
client.BaseAddress = new Uri(_Uri);
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_ContentType));
client.DefaultRequestHeaders.Add("Session-Token", Properties.Settings.Default.GLPI_SESSION_TOKEN);
client.DefaultRequestHeaders.Add("App-Token", Properties.Settings.Default.GLPI_APP_TOKEN);
// JSON Content (input string array with file uploaded informations)
JSON_C.DocumentAdder JSONContent = new JSON_C.DocumentAdder();
JSONContent.name = "sth";
JSONContent._filename = filebytes;
HttpContent _JSONContent = new StringContent("uploadManifest={\"input\": " + JsonConvert.SerializeObject(JSONContent).ToString() + "}", Encoding.UTF8, "application/json");
content.Add(_JSONContent);
// File Content in bytes
var fileContent = new ByteArrayContent(filebytes);
fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("_filename") { FileName = filepath };
//fileContent.ReadAsByteArrayAsync();
content.Add(fileContent);
// Request
HttpResponseMessage reponse;
var _Method = new HttpMethod("POST");
reponse = client.PostAsync(_Uri, content).Result;
// Request response
rcontent = reponse.Content.ReadAsStringAsync().Result;
textBox2.Text = reponse.ToString() + Environment.NewLine + rcontent.ToString();
}
}
}
但这是我的回应:
状态码:400,原因短语:“错误请求”,版本:1.1,内容:System.Net.Http.StreamContent,标头:
{
连接:关闭
缓存控制:不存储,必须重新验证,不缓存
日期:2018年11月26日星期一12:50:09 GMT
伺服器:Apache / 2.4.29
伺服器:(Ubuntu)
内容长度:61
内容类型:application / json; charset = UTF-8
过期:1997年7月26日星期一05:00:00 GM
}
使用:
[“ ERROR_UPLOAD_FILE_TOO_BIG_POST_MAX_SIZE,”文件似乎太大“]
我要上传的文件为592bytes!一个请求中的最大总限制为2Mo。 php.ini中的post_max_size
为“ 8M”,将其更改为“ 0”后的结果相同(完全没有限制)。然后将其设置为20M以匹配upload_max_filesize
(/etc/php/7.2/apache2/php.ini)。
upload_max_filesize
_ ..也是“ 20M”
答案 0 :(得分:1)
如果有人找到此职位并需要帮助,这就是我成功的方法:
分别创建“会话令牌”并使用“ RestSharp”之后。
// Upload
var RSClient = new RestClient(Properties.Settings.Default.GLPI_URL);
var request = new RestRequest("Document", Method.POST);
request.AddHeader("Session-Token", Properties.Settings.Default.GLPI_SESSION_TOKEN);
request.AddHeader("App-Token", Properties.Settings.Default.GLPI_APP_TOKEN);
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "multipart/form-data");
request.AddQueryParameter("uploadManifest", "{\"input\": {\"name\": \"UploadFileTest\", \"_filename\": \"GiletsJaunes.jpg\"}}");
request.AddFile("test", @"C:\path\to\File.jpg");
IRestResponse response = RSClient.Execute(request);
var content = response.Content;
textBox2.Text = textBox2.Text + Environment.NewLine + content;
详细信息:
RestSharp.Authenticator = new SimpleAuthenticator
,因此我在AddHeader
中添加了这些Auth参数。 new StringContent
,我无法在AddQueryParameter
中使用序列化Json字符串,所以我手动编写了它。 Alleluyah。