我正在尝试使用Java + Jersey + multipart + Tomcat + HTML / CSS / JS进行文件上传。
出于测试目的,我只是尝试从我的“下载”文件夹上传一些任意文件,并将其写入我的桌面。
我唯一的问题似乎是,当我尝试通过fileDetail.getFileName();
获取上传文件的文件名时,我得到了一个带文件名的连接路径(" C:UsersHackRDownloadsstackexample。 CSV"。)
我的计划(遵循教程)然后将目标目录添加到文件名:
String uploadedFileLocation = "C:/Users/HackR/Desktop/"
+ fileDetail.getFileName();
并写出来。然而,它最终试图把它写成这样的事情:
C:/Users/HackR/Desktop/C:UsersHackRDownloadsstackexample.csv
实际上只是在我的桌面上创建一个名为C
的0kb文件。
如何以此方式获取实际文件名(即没有路径)?
这是我的整个文件上传服务:
package com.mkyong.rest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;
@Path("/file")
public class UploadFileService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String uploadedFileLocation = "C:/Users/HackR/Desktop/"
+ fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
// save uploaded file to new location
private void writeToFile(InputStream uploadedInputStream,
String uploadedFileLocation) {
try {
OutputStream out = new FileOutputStream(new File(
uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[1024];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
连接文件名是使用Eclipse内部浏览器的结果,它可能无法正确支持您的HTML,CSS,JS等,特别是如果您正在使用Angular JS或任何webkit技术,甚至是间接的。
eclipse内部浏览器实际上只是一个本地浏览器控件:)在Mac上,它使用Safari,其引擎是webkit。
使用Safari,或者使用Chrome,这仍然非常相似,因为它基于相对较新的webkit分支,然后它应该在Mac上的eclipse内部浏览器中工作:)
由于您的帖子表明您使用的是Windows计算机,因此您需要使用已安装的Internet Explorer使代码正常工作,因为这是eclipse在Windows上使用的内容。
祝你好运!