gpt4 book ai didi

json - Delphi 发送 json + 文件

转载 作者:行者123 更新时间:2023-12-03 19:15:29 29 4
gpt4 key购买 nike

我是 delphi 新手,我需要通过单个 http post 方法发送 json 字符串和一些额外的文件,我应该怎么做?我可以使用可行的解决方案,但是由于我使用的是 TIdHTTP 类,因此发送的 json 测试会中断,并且变得无法使用,我应该如何解决这个问题?

// Keiciam failu pavadinimus
if form1.ComboBox10.ItemIndex > 0 then
CopyFile(Pchar(form1.appdatadirStr + 'temp\Automatictmp.pdf'), Pchar(form1.appdatadirStr + 'temp\auto_' + OfferNumber + '.pdf'), true);
CopyFile(Pchar(form1.appdatadirStr + 'temp\vistmp.pdf'), Pchar(form1.appdatadirStr + 'temp\full_' + OfferNumber + '.pdf'), true);
CopyFile(Pchar(form1.appdatadirStr + 'temp\tmp.pdf'), Pchar(form1.appdatadirStr + 'temp\tech_' + OfferNumber + '.pdf'), true);
CopyFile(Pchar(form1.appdatadirStr + 'temp\' + uniquetmpfile + '.ini'), Pchar(form1.appdatadirStr + 'temp\vmss_' + OfferNumber + extension), true);
try
if form1.ComboBox10.ItemIndex > 0 then
filaspdf.AddFile('Automatic', form1.appdatadirStr + 'temp\auto_' + OfferNumber + '.pdf', 'multipart/form-data');
filaspdf.AddFile('AllFile', form1.appdatadirStr + 'temp\full_' + OfferNumber + '.pdf', 'multipart/form-data');
filaspdf.AddFile('UserFile', form1.appdatadirStr + 'temp\tech_' + OfferNumber + '.pdf', 'multipart/form-data');
filaspdf.AddFile('MainFile', form1.appdatadirStr + 'temp\vmss_' + OfferNumber + extension, 'multipart/form-data');
filaspdf.AddFormField('JSON',IvestiniaiJSON);
finally
IdHTTP.Post('http://prgcc.salda.lt/ventmaster_input', filaspdf); // Siunciam i WEB;
end;
filaspdf.Free;

最佳答案

默认情况下,AddFormField()使用 MIME 的 quoted-printable 对字符串数据进行编码传输格式。有些服务器不支持。您可以通过设置 TIdFormDataField.ContentTransfer 来禁用它。如果需要,属性:

filaspdf.AddFormField('JSON',IvestiniaiJSON).ContentTransfer := '';

注意 AddFormField() 的默认内容类型是 text/plain . JSON 的正确内容类型是 application/json反而:
with filaspdf.AddFormField('JSON',IvestiniaiJSON) do
begin
ContentType := 'application/json';
Charset := 'utf-8';
ContentTransfer := '';
end;

有些服务器根本不接受在文本字段中指定的内容类型。如果需要,您可以禁用内容类型:
with filaspdf.AddFormField('JSON',IvestiniaiJSON) do
begin
ContentType := ' '; // note the space character
ContentTransfer := '';
end;

需要空格,因为内容类型将设置为 application/octet-stream如果您指定一个空字符串,但如果属性 setter 解析一个空字符串,则将设置为空。

话虽如此,您在调用 AddFile() 时指定了错误的内容类型。 . multipart/form-data不是有效的内容类型,而是一种处置, TIdMultipartFormDtaStream在内部为您处理。您需要为文件本身指定正确的内容类型:
filaspdf.AddFile('Automatic', form1.appdatadirStr + 'temp\auto_' + OfferNumber + '.pdf', 'application/pdf');

或者让 AddFile()根据文件扩展名为您确定内容类型:
filaspdf.AddFile('Automatic', form1.appdatadirStr + 'temp\auto_' + OfferNumber + '.pdf');

关于json - Delphi 发送 json + 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183593/

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