gpt4 book ai didi

javascript - Jersey FormData,上传多个文件数据

转载 作者:行者123 更新时间:2023-11-29 03:06:04 25 4
gpt4 key购买 nike

我在 Jersey 中编写了一个 Rest 服务来上传多个文件。如下所示。但我想要属性名称,即 Restservice 类中的 name="metadata"和 name="file "。

        Select XML file 1: <input type="file" **name="metadata"** size="45" accept=".xml" />


Select PDF file 2: <input type="file" **name="fileak**" size="45" accept=".pdf" />

选择 XML 文件 1:

选择 PDF 文件 2:

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(
@FormDataParam("file") List<FormDataBodyPart> parts) {
for (FormDataBodyPart part : parts) {
FormDataContentDisposition disp = part
.getFormDataContentDisposition();
InputStream in = part.getValueAs(InputStream.class);
}

return Response.ok(" uploaded successfully !!").build();
}

FormDataContentDisposition 仅从表单中提取内容类型和文件名,而不是输入类型名称=“”属性。

如有任何帮助,我们将不胜感激。

我正在使用 HTML 发布请求,如下所示。

同时发布 HTML 文件。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
<meta content="utf-8" http-equiv="encoding" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">

$(document).ready(function()
{
$("#uploadBtn").click(function()
{
$('input[type="file"]').each(function(index, value)
{


var nameValue=value.attributes[0].value;
var file = value.files[0];

if(file)
{
var formData = new FormData();

formData.append('file', file);
//formData["name"] = nameValue;

$.ajax({
url : '/publicationservice-web/v1/publication/upload',
type : 'POST',
data : formData,
cache : false,
contentType : false,
processData : false,
name:nameValue,
success : function(data, textStatus, jqXHR) {
var message = jqXHR.responseText;
$("#messages").append("<li>" + message + "</li>");
},
error : function(jqXHR, textStatus, errorThrown) {
$("#messages").append("<li style='color: red;'>" + textStatus + "</li>");
}
});
}
});
});
});
</script>
</head>
<body>
<h1>NGBulletin Upload System - Metadata and PDF</h1>

<form action="v1/publication/upload" method="post" enctype="multipart/form-data">

<p>
Select XML file 1: <input type="file" name="metadata" id="metadata" size="45" accept=".xml" />
</p>
<p>
Select PDF file 2: <input type="file" name="fileak" id="fileak" size="45" accept=".pdf" />
</p>

<p>
<input id="uploadBtn" type="button" value="Upload PFD Files" />
</p>

</form>

<ul id="messages">
</ul>

</body>
</html>

最佳答案

问题是,@FormDataParam("file") 中的值的名字。当您想要按名称提取所有部分时,可以使用它。例如你可以有

post(@FormDataParam("metadata") InputStream metaIn,
@FormDataParam("metadata") FormDataContentDisposition metaFcd,
@FormDataParam("fileak") InputStream fileakIn,
@FormDataParam("fileak") FormDataContentDisposition fileakFcd) {
}

但是如果你想自己遍历所有部分,你应该使用 FormDataMultiPart而不是 List<FormDataBodyPart> .您可以获取 map ,以名称为键。 FormDataBodyPart.getName() 中还提供了名称.例如

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadAsset(FormDataMultiPart multipart) {

Map<String, List<FormDataBodyPart>> map = multipart.getFields();

for (Map.Entry<String, List<FormDataBodyPart>> entry : map.entrySet()) {

for (FormDataBodyPart part : entry.getValue()) {
InputStream in = part.getEntityAs(InputStream.class);
String name = part.getName();
System.out.println("--- name: " + name);
}
}
return Response.ok("cool upload").build();
}

关键是,如果您要使用 @FormDataParam,尝试获取名称(以编程方式)是毫无意义的。 annatotion,因为您最终已经对名称进行了硬编码(在注释值中),所以您已经知道了。

关于javascript - Jersey FormData,上传多个文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148981/

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