我正在尝试使用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();
        }

    }

}

最佳答案

串联文件名是使用Eclipse内部浏览器的结果,该浏览器可能无法正确支持HTML,CSS,JS等,尤其是在使用Angular JS或任何Webkit技术的情况下,甚至是间接使用。

eclipse内部浏览器实际上只是本机浏览器控件:)在Mac上,这使其使用Safari,其引擎是webkit。

使您使用Safari或可能仍然非常相似的Chrome,因为它基于相对较新的webkit分支,然后它也应在Mac上的eclipse内部浏览器中工作:)

正如您的帖子暗示您在Windows计算机上一样,您需要使代码与已安装的Internet Explorer一起使用,因为这是Eclipse在Windows上使用的。

无论如何,祝你好运!

关于java - 新泽西州多部分getFileName()具有串联的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40063810/

10-12 03:19