我正在编写一个返回base64编码的PDF文件的Web服务,所以我的计划是在响应中添加两个标头:
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Run Code Online (Sandbox Code Playgroud)
我的问题是:是Content-Transfer-Encoding
一个有效的HTTP标头?我认为它可能只适用于MIME.如果没有,我应该如何制作我的HTTP响应以表示我正在返回base64编码的PDF?谢谢.
编辑:
看起来HTTP不支持此标头.来自RFC2616第14节:
注意:虽然Content-MD5的定义与HTTP的实体主体的RFC 1864完全相同,但Content-MD5到HTTP实体主体的应用程序有几种不同于其应用程序的MIME实体 - 身体.一个是,与MIME不同,HTTP不使用Content-Transfer-Encoding,并且使用Transfer-Encoding和Content-Encoding.
我应该设置标题的任何想法?谢谢.
编辑2
在这个PHP参考手册页的注释中找到的许多代码示例似乎表明它实际上是一个有效的HTTP头:
在编写MIME时,可以将消息的不同块与特定边界分开.我出于某种原因失败了找到解释这个边界的任何文件,但这是我从例子中收集的内容:
边界可以是任何字母和数字的字符串,即"d29a0c638b540b23e9a29a3a9aebc900aeeb6a82".
没有生成边界的规则,你可以只是md5sum你心爱的名字,在这里,你已经有了你的边界.
如果您通过HTTP发送MIME,则必须添加标题"Content-Type",指定您执行此操作,并且您的边界标题内容可能如下所示:
多部分/格式的数据; 边界= d29a0c638b540b23e9a29a3a9aebc900aeeb6a82
在邮件正文中,边界应以" - "开头,如:
--d29a0c638b540b23e9a29a3a9aebc900aeeb6a82
但遵循这些规则(以及这个有用的答案)我无法生成服务器可以接受的POST查询.我错过了什么吗?我弄错了吗?
我找不到TrueType字体的正确MIME类型.我需要它,因为我正在使用文件上传类(CodeIgniter)来上传文件,我想只允许上传TTF.试过这个:
'ttf' => 'font/ttf'
'ttf' => 'font/truetype'
Run Code Online (Sandbox Code Playgroud)
没有成功.
有任何想法吗 ?
我只是设计一个数据库表的模式,它将保存电子邮件附件的详细信息 - 它们的大小以字节,文件名和内容类型(即"image/jpg","audio/mp3"等).
有人知道我可以期待内容类型的最大长度吗?
鉴于Python 2.6中的RFC822消息,我如何获得正确的文本/纯文本内容部分?基本上,我想要的算法是这样的:
message = email.message_from_string(raw_message)
if has_mime_part(message, "text/plain"):
mime_part = get_mime_part(message, "text/plain")
text_content = decode_mime_part(mime_part)
elif has_mime_part(message, "text/html"):
mime_part = get_mime_part(message, "text/html")
html = decode_mime_part(mime_part)
text_content = render_html_to_plaintext(html)
else:
# fallback
text_content = str(message)
return text_content
Run Code Online (Sandbox Code Playgroud)
这些事,我get_mime_part
和has_mime_part
拍下来,但我不太清楚如何从MIME部分解码的文本.我可以使用编码文本get_payload()
,但如果我尝试使用方法的decode
参数get_payload()
(请参阅doc),当我在text/plain部分调用它时会出现错误:
Run Code Online (Sandbox Code Playgroud)File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ email/message.py", line 189, in get_payload raise TypeError('Expected list, got %s' % type(self._payload)) TypeError: Expected list, got <type 'str'>
另外,我不知道如何使用HTML并尽可能地将其呈现为文本.
下面的程序显示HTML multipart mime类型的意外返回值.为什么这个程序打印"text/plain"而不是"text/html"?
public class Main {
public static void main(String[] args) throws javax.mail.MessagingException, java.io.IOException {
javax.mail.internet.MimeBodyPart mime_body_part = new javax.mail.internet.MimeBodyPart();
mime_body_part.setContent("<h1>foo</h1>", "text/html");
System.out.println(mime_body_part.getContentType());
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了许多替代方法,包括设置包装在DataHandler中的ByteArrayDataSource,但无济于事.当我用MimeMessage而不是MimeBodyPart尝试这个时,会发生同样的事情.
要在Linux上编译和运行:
javac -classpath .:activation.jar:mail.jar Main.java
java -classpath .:activation.jar:mail.jar Main
Run Code Online (Sandbox Code Playgroud) 我有兴趣检测我的iPhone应用程序的文档目录中的文件的MIME类型.通过文档搜索没有提供任何答案.
我知道如何更改Web服务器中的MIME类型.我使用它来确保浏览器下载我的.scrpt文件而不是打开纯文本版本.到目前为止这么好但是有可能通过链接做同样的事情吗?我想链接到GitHub上的文件,但这将打开为纯文本文件.我可以在链接中添加"MIME类型属性"以告诉浏览器下载文件吗?
这是我想看到的:
<a mimetype="application/octet-stream" href="http://gist.github.com/raw/279094/39d5a2c1037288d5ee0ba1a17dca9edb368bbe42/RepairiPhotoDates.scpt">download</a>
Run Code Online (Sandbox Code Playgroud) 题
是Java 8 java.util.Base64
MIME编码器和解码器一个下拉更换为不支持的,内部的Java API sun.misc.BASE64Encoder
和sun.misc.BASE64Decoder
?
到目前为止我的想法和原因
根据我的调查和快速测试(见下面的代码),它应该是替代品,因为
sun.misc.BASE64Encoder
基于其JavaDoc是RFC1521中规定的BASE64字符编码器.此RFC是MIME规范的一部分......java.util.Base64
基于JavaDoc 使用RFC 2045表1中指定的"Base64 Alphabet" 进行编码和解码操作...在MIME下假设RFC 1521和2045没有重大变化(我找不到任何变化)并且基于我使用Java 8 Base64 MIME编码器/解码器的快速测试应该没问题.
我在找什么
以供参考
我的测试代码
public class Base64EncodingDecodingRoundTripTest {
public static void main(String[] args) throws IOException {
String test1 = " ~!@#$%^& *()_+=`| }{[]\\;: \"?><,./ ";
String test2 = test1 + test1;
encodeDecode(test1);
encodeDecode(test2);
}
static …
Run Code Online (Sandbox Code Playgroud) 我想使用javamail发送带有内嵌图像的电子邮件.
我正在做这样的事情.
MimeMultipart content = new MimeMultipart("related");
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent(message, "text/html; charset=ISO-8859-1");
content.addBodyPart(bodyPart);
bodyPart = new MimeBodyPart();
DataSource ds = new ByteArrayDataSource(image, "image/jpeg");
bodyPart.setDataHandler(new DataHandler(ds));
bodyPart.setHeader("Content-Type", "image/jpeg; name=image.jpg");
bodyPart.setHeader("Content-ID", "<image>");
bodyPart.setHeader("Content-Disposition", "inline");
content.addBodyPart(bodyPart);
msg.setContent(content);
Run Code Online (Sandbox Code Playgroud)
我也试过了
bodyPart.setHeader("inline; filename=image.jpg");
Run Code Online (Sandbox Code Playgroud)
和
bodyPart.setDisposition("inline");
Run Code Online (Sandbox Code Playgroud)
但无论如何,图像都作为附件发送,内容处理正在变成"附件".
如何使用javamail在电子邮件中内联发送图像?