我有一个烦人的问题,我不确定有人知道答案,但询问不需要任何费用。
我正在使用 Domino-Data-Service Rest-API 通过 PATCH-Methode 将 PDF 文件附加到服务器。附件确实工作正常,但富文本字段中的附件确实有一个自动生成的名称。
我的问题:如何通过附加该文件来更改其名称。
我用 C# 编写了代码,但我认为这不是一个依赖于编程语言的问题。
我用于附加 PDF 的代码 (C#):
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes({username:passwort})));
Byte[] bytes = File.ReadAllBytes(@"H:\jakob.pdf");
String file = Convert.ToBase64String(bytes);
var json = "{" +
"\"anmerkung\":{" +
"\"type\":\"multipart\"," +
"\"content\":[ {" +
"\"contentType\":\"application/pdf\"," +
"\"data\":\"" + file + "\"," +
"\"contentTransferEncoding\":\"base64\"" +
"}" +
"]" +
"}" +
"}";
var data = new StringContent(json, Encoding.UTF8, "application/json");
var url = @"https://{database}/api/data/documents/unid/424CC34CFB0746F6C12585A7003B277B?computewithform=true&form={formname}";
var response = await client.PatchAsync(url, data);
string result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
client.Dispose();
这工作正常,但我的 PDF 看起来像这样:
我希望 pdf 文件的名称为 jakob.pdf
因此,我尝试重建 json,就像在富文本字段中对包含 PDF 文件的文档使用 GET 请求时构建 json 的方式一样
我使用重建 json(C#) 附加 PDF 的代码:
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes({username:passwort})));
Byte[] bytes = File.ReadAllBytes(@"H:\jakob.pdf");
String file = Convert.ToBase64String(bytes);
var json2 = "{" +
"\"anmerkung\":{" +
"\"type\":\"multipart\"," +
"\"content\":[ {" +
"\"contentType\":\"application/pdf; name=\"jakob.pdf\"\","+
"\"contentDisposition\":\"inline; filename=\"jakob.pdf\"\","+
"\"data\":\"" + file + "\"," +
"\"contentTransferEncoding\":\"base64\"" +
"}" +
"]" +
"}" +
"}";
var data = new StringContent(json2, Encoding.UTF8, "application/json");
var url = @"https://{database}/api/data/documents/unid/424CC34CFB0746F6C12585A7003B277B?computewithform=true&form={formname}";
var response = await client.PatchAsync(url, data);
string result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
client.Dispose();
当我使用这段代码时,我总是收到错误消息:
"code":400,
"text":"Bad Request",
"message":"Fehler beim Parsen der JSON-Inhalte",
"type":"text",
"data":"com.ibm.domino.services.ServiceException: Fehler beim Parsen der JSON-Inhalte\r\n\tat
关于这段代码,我什至不确定,如果这段代码正常工作,这只是我尝试过的一个想法。
我知道这是一个非常复杂和困难的问题,但也许有人知道这个问题的答案或者有一些解决这个问题的想法。
提前致谢!
最佳答案
出现错误响应的最可能原因是,当您在 JSON 中设置文件名时,您创建了格式错误的 JSON。
以单行代码为例,由于文件名周围有引号字符,该行是格式错误的 JSON:
"\"contentType\":\"application/pdf; name=\"jakob.pdf\"\","+
contentDisposition
行也有同样的问题。
我强烈建议使用旨在将结构化对象转换为正确的序列化 JSON 的 API,这应该可以轻松避免该问题,但我不知道 C# 中有什么可用于此目的。
下页底部的列表可能会有所帮助:https://www.json.org/json-en.html
关于json - Domino 数据服务 - 更改富文本字段中附加文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63048082/