Java Jersey 如何以文件为参数上传文件
Posted
技术标签:
【中文标题】Java Jersey 如何以文件为参数上传文件【英文标题】:Java Jersey How to Upload File with the File as Parameter 【发布时间】:2019-01-05 19:33:54 【问题描述】:我在资源类中有一个方法,uploadFile。它调用一个方法,该方法接受一个文件作为参数,然后将文件拆分为多个部分,然后再将这些部分写入磁盘。
我想知道如何为其编写客户端测试,假设可以在不使用@FormDataParam InputStream 的情况下上传文件。因为我认为在这种情况下我不需要它。
我已经看到很多使用 Jersey 上传文件的示例,这些文件将 InputStream 和 FormDataContentDisposition 作为@FormDataParam,但我不确定这是否是强制性的。
@POST
@Path("/uploadfile/file")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@PathParam("file") File file, @FormDataParam("file") FormDataContentDisposition fileMetaData) throws IOException
FileSplit.splitFile(file); //Write file to disk
String output = "File successfully uploaded";
return Response.status(200).entity(output).build();
//Method to write file to disk
public static void splitFile(File f) throws IOException
int partCounter = 1;
int sizeOfFiles = (int) (f.length() / 3);
byte[] buffer = new byte[sizeOfFiles];
String fileName = f.getName();
try (FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis))
int bytesAmount = 0;
while ((bytesAmount = fis.read(buffer)) != -1)
String filePartName = String.format("%s.%03d", fileName, partCounter++);
File newFile = new File("D:\\", filePartName);
try (FileOutputStream out = new FileOutputStream(newFile))
out.write(buffer, 0, bytesAmount);
【问题讨论】:
【参考方案1】:如果您使用 Socket 发送像 HttpUrlConnection
这样的请求,您可以在 outPutStream
中写入文件字节,在服务器端使用 HttpServletRequest
并处理 request.getInputStream()
以在您的存储中写入字节。
或者如果您可以使用multipart-formdata
发送请求并使用RequestPart() MultiPartFile file
捕获文件以上传文件。
我希望这会有所帮助
【讨论】:
以上是关于Java Jersey 如何以文件为参数上传文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在Java Jersey REST服务中强制使用queryparams?