我想使用multipart/mixed创建HTTP响应,但我不确定哪些浏览器支持它; 从客户的角度来看,如果它听起来很方便.说实话,我不需要具体的内容类型.我只想在同一个响应中传输多个文件; 也许还有更多使用的内容类型.
我想使用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在电子邮件中内联发送图像?
我使用Spring Boot并希望使用Controller来接收多部分文件上传.发送文件时,我不断收到错误415不支持的内容类型响应,并且永远不会到达控制器
There was an unexpected error (type=Unsupported Media Type, status=415).
Content type 'multipart/form-data;boundary=----WebKitFormBoundary1KvzQ1rt2V1BBbb8' not supported
Run Code Online (Sandbox Code Playgroud)
我尝试使用form:action在html/jsp页面中发送,也在使用RestTemplate的独立客户端应用程序中发送.所有尝试都给出相同的结果
multipart/form-data;boundary=XXXXX not supported.
从多部分文档看来,必须将边界参数添加到分段上传,但这似乎与控制器接收不匹配 "multipart/form-data"
我的控制器方法设置如下
@RequestMapping(value = "/things", method = RequestMethod.POST, consumes = "multipart/form-data" ,
produces = { "application/json", "application/xml" })
public ResponseEntity<ThingRepresentation> submitThing(HttpServletRequest request,
@PathVariable("domain") String domainParam,
@RequestParam(value = "type") String thingTypeParam,
@RequestBody MultipartFile[] submissions) throws Exception
Run Code Online (Sandbox Code Playgroud)
使用Bean安装程序
@Bean
public MultipartConfigElement multipartConfigElement() {
return new MultipartConfigElement("");
}
@Bean
public MultipartResolver multipartResolver() {
org.springframework.web.multipart.commons.CommonsMultipartResolver multipartResolver = new org.springframework.web.multipart.commons.CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return …Run Code Online (Sandbox Code Playgroud) 我正在考虑在Web服务器模块中集成多部分表单数据解析,这样我就可以解除后端Web应用程序(通常用动态语言编写)来解析多部分数据本身.多部分语法(RFC 2046)看起来并不重要,如果我手工实现它,很多事情都可能出错.是否已经有一个用C或C++编写的好的,轻量级的multipart/form-data解析器?我正在寻找除C或C++标准库之外没有外部依赖关系的那个.我不需要电子邮件附件处理或缓冲的I/O类或可移植性运行时或其他任何东西,只需要多部分/表单数据解析.
我考虑过的事情:
我还看过用Ragel编写一个解析器,但我无法弄清楚如何做到这一点,因为语法不是静态的:边界可以任意改变.
我想将文件上传到s3,所以我想从这篇文章运行上传程序:http: //www.componentix.com/blog/9
为此,我需要安装multipart模块. https://github.com/isaacs/multipart-js
但通过执行npm install multipart,它给出了错误
我应该如何安装这个多部分模块,以便我可以运行这个程序?
我用multer.
当我把以下片段放入 app.js
app.use(multer({
dest: './uploads'
}
).single('file'));
Run Code Online (Sandbox Code Playgroud)
它在根文件夹下创建了一个新文件夹,我的问题是关于这个新文件夹的lifeCycle,什么时候会被删除?100次通话后文件夹的大小是多少?
如果我不想限制文件大小,我应该在配置中添加什么?
app.use(multer({
dest: './public/profile/img/',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
Run Code Online (Sandbox Code Playgroud)
更新
我的应用程序就像是
app.js文件包含
app.use(multer({
dest: './uploads'
}
).single('file'));
app.use('/', routes, function (req, res, next) {
next();
});
Run Code Online (Sandbox Code Playgroud)
路径文件如下所示
appRouter
.post('*', function (req, res) {
handler.dispatch(req, res)
})
.get('*', function (req, res) {
handler.dispatch(req, res)
})
Run Code Online (Sandbox Code Playgroud)
在第三个文件中,我使用如下的解压缩
update: function (req, res) {
var filePath = path.join(req.file.destination, req.file.filename);
var unzipper = new …Run Code Online (Sandbox Code Playgroud) 我可以将文件作为multipart发送XMLHttpRequest到servlet吗?我正在制作一个表单并将其作为multipart提交,但不知何故我没有得到成功上传它的响应.我不希望刷新页面,因此必须由ajax进行.
我已经成功开发了一项服务,我在其中阅读在泽西岛以多部分形式上传的文件.这是我一直在做的非常简化的版本:
@POST
@Path("FileCollection")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) throws IOException {
//handle the file
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我得到了一个新的要求.除了我上传的文件外,我还要处理任意数量的资源.我们假设这些是图像文件.
我想我只是为客户端提供一个表单,其中包含一个文件输入,一个输入用于第一个图像,一个按钮允许向表单添加更多输入(使用AJAX或简单的JavaScript).
<form action="blahblahblah" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="file" name="image" />
<input type="button" value="add another image" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
因此,用户可以为表单添加更多图像输入,如下所示:
<form action="blahblahblah" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="file" name="image" />
<input type="file" name="image" />
<input type="file" name="image" />
<input type="button" value="add another image" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
我希望阅读与集合同名的字段非常简单.我在MVC .NET中使用文本输入成功完成了它,我认为在Jersey中不会更难.事实证明我错了.
找不到关于这个主题的教程,我开始尝试.
为了看看如何做到这一点,我把问题简化为简单的文本输入.
<form action="blahblabhblah" …Run Code Online (Sandbox Code Playgroud) 有没有办法在一个多部分请求中附加多个图像?根据用户选择的图像数量,图像是动态的.
下面的代码仅适用于单个图像:
接口:
@Multipart
@POST("/post")
void createPostWithAttachments( @Part("f[]") TypedFile image,@PartMap Map<String, String> params,Callback<String> response);
Run Code Online (Sandbox Code Playgroud)
执行:
TypedFile file = new TypedFile("image/jpg", new File(gallery.sdcardPath));
Map<String,String> params = new HashMap<String,String>();
params.put("key","value");
ServicesAdapter.getAuthorizeService().createPostWithAttachments(file,params, new Callback<String>() {
@Override
public void success(String s, Response response) {
DBLogin.updateCookie(response);
new_post_text.setText("");
try {
JSONObject json_response = new JSONObject(s);
Toast.makeText(getApplicationContext(), json_response.getString("message"), Toast.LENGTH_LONG).show();
if (json_response.getString("status").equals("success")) {
JSONObject dataObj = json_response.getJSONObject("data");
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
} else {
Log.d(TAG, "Request failed");
}
} catch (Exception e) {
Log.d(TAG, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Retrofit2在服务器上发送文件.我根据文档做了一切,但总是得到400服务器错误.
我试图这样做:
RequestBody body =
RequestBody.create(MediaType.parse("image/png"), photo);
//..........
@Multipart
@POST(ADD_PHOTO)
Observable<HPSPhotoResponse>
addPhoto(@Part("file") RequestBody file);
Run Code Online (Sandbox Code Playgroud)
......并且像这样:
MultipartBody.Part part = MultipartBody.Part.createFormData("file", "file", body);
//...........
@Multipart
@POST(ADD_PHOTO)
Observable<HPSPhotoResponse>
addPhoto(@Part("file") MultipartBody.Part files);
Run Code Online (Sandbox Code Playgroud)
无所谓 结果始终相同"多部分请求:不存在所需的MultipartFile参数'文件'" - 服务器响应.
我认为服务器上的Spring工作不好,但是我在Swift(iOS)上做了相同的代码而且它有效!这里服务器看到这个'文件'部分.
Alamofire.upload(method, endpoint, headers: headers,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(fileURL: self.filePath!, name: "file")
}
Run Code Online (Sandbox Code Playgroud)
现在我希望它可以在Android上使用Retrofit.但我甚至查看了Retrofit请求的日志,实际上我在日志中看不到任何"文件"文本.
这有什么问题?
multipart ×10
java ×3
android ×2
file-upload ×2
javascript ×2
node.js ×2
retrofit ×2
ajax ×1
c ×1
c++ ×1
express ×1
forms ×1
http ×1
jakarta-mail ×1
jax-rs ×1
jersey ×1
mime ×1
mime-types ×1
multer ×1
parsing ×1
retrofit2 ×1
servlets ×1
spring ×1
spring-boot ×1
spring-mvc ×1