json - Domino 数据服务 - 更改富文本字段中附加文件的名称

标签 json httprequest lotus-notes lotus-domino ibm-domino

我有一个烦人的问题,我不确定有人知道答案,但询问不需要任何费用。

我正在使用 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 看起来像这样:

enter image description here

我希望 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/

相关文章:

c# - 我是否必须关闭我的代码从未访问过的 HttpRequest 输入流?

java - 为 Lotus Notes 表单动态创建 java 类

java - 通过 Java 为日历条目创建 Lotus Notes 插件

lotus-notes - Lotusscript:作为网络用户发送电子邮件时的发件人地址

json - React-Three-Fiber (R3F) : GLTF loader loading issue. 为什么我看不到我的模型?

javascript - 读取已解析的 JSON 响应

c# - 基础连接已关闭。 (HttpWebRequest)

jquery - 解析jquery中的json问题

Java - 如何处理动态 JSON 类别名称?

java - Java Servlet 中的异步行为?