Java + Jersey + multipart + Tomcat + HTML/CSS/JSでファイルのアップロードを取得しようとしています。Jersey multipart getFileName()にパスが連結されています
テスト目的のために、私はダウンロードフォルダから任意のファイルをアップロードしてデスクトップに書き込もうとしています。
私の唯一の問題は、アップロードされたファイルのファイル名をfileDetail.getFileName();
経由で取得しようとすると、どうにかしてファイル名( "C:UsersHackRDownloadsstackexample.csv")で連結パスが取得されているようです。
String uploadedFileLocation = "C:/Users/HackR/Desktop/"
+ fileDetail.getFileName();
し、それを書き出し:(チュートリアル以下)
私の計画は、ファイル名に先ディレクトリを付加することでした。しかし、それはこのように代にそれを書き込もうとして終わる:実際にちょうど私のデスクトップ上のC
という名前の0キロバイトのファイルを作成します
C:/Users/HackR/Desktop/C:UsersHackRDownloadsstackexample.csv
。
実際のファイル名を、この例で必要な方法(パスがない)にするにはどうすればよいですか?
これは私の全体のファイルアップロードサービスです:
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();
}
}
}
あなたは正確なプラットフォームを教えてください。ウィンドウズ10?これは、私の推測では、あなたのシステムのブラウザエンジンでEclipseが使用していると思われる問題の原因を簡単に見つけることができるからです。 – yeoman
@yeomanはい、Windows 10です。ありがとうございます。 –