当前位置: 首页 > 知识库问答 >
问题:

为什么不直接上传 xls 文件?

壤驷高旻
2023-03-14

我使用dropwizard制作了一个非常传统的文件上传方法。

所以我在资源中有一个这样的方法

@POST
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@UnitOfWork
public Response uploadFile(
    @FormDataParam("file") final InputStream fileInputStream,
    @FormDataParam("file") final FormDataContentDisposition contentDispositionHeader, 
    @Context HttpServletRequest request) throws IOException {...

里面没有什么特别的,它只是保存到一个路径,使用java.nio库,就像这样

java.nio.file.Path outputPath = FileSystems.getDefault()
    .getPath(System.getProperty("user.home"), fileName);

    if (!Files.exists(outputPath.getParent()))
        Files.createDirectories(outputPath.getParent());

    Files.copy(fileInputStream, outputPath);

它只是不会上传excel文件。我在其他地方读到excel文件和它们的底层类型受到怀疑。请问我需要做什么?

共有1个答案

江子石
2023-03-14

基本上,该方法适用于其他文件,但不能上传xls文件。我不知道确切的原因,但是我的怀疑都贴在问题里了。我让它工作的方法是替换简单的复制行

Files.copy(fileInputStream, outputPath);

OutputStream outputStream = null;
    try {
        outputStream = new FileOutputStream(new File(outputPath.toString()));
        int read = 0;
        byte[] bytes = new byte[1024];
        while ((read = fileInputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, read);
        }
        outputStream.flush();
    }
    catch (IOException ioe) {
        ioe.printStackTrace();
    }
    finally{
        outputStream.close();
    }

它通过将输入流读入字节数组,然后将其写入新的FileOutputStream来绕过(我怀疑这是一种安全功能)。

如果有人有比这更好的“正确的方法”,看到它会很酷。堆栈跟踪没有告诉我发生了什么。

 类似资料:
  • 问题内容: 经过一整天的研究和尝试,我终于放弃了 纯AJAX的 上传文件(ps:本文如何与JQuery异步上传文件?埋了我的最后希望) 我的问题可能没什么意义,但是我仍然想知道为什么ajax(或XMLHttpRequest)不能处理这个问题?为什么文件不能像真正的httprequest那样传输? 问题答案: 出于安全原因,JavaScript无法读取本地文件,因此我们无法使用AJAX发送数据。 但

  • 我不知道这是与代码有关还是与服务器有关... 在一个PHP页面上,我调用了一个包含标准PHP上传过程的上传函数。在调用函数之后,我执行重定向(尝试使用window.location或header())。 奇怪的是,每件事都运行良好的几次,然后它就不会再上传了(uploadOK也不会是0)。它不会将文件移动到服务器上。 然后,我将取出重定向,上传将重新开始工作。我把重定向放回去,上传还能工作几次,然

  • 问题内容: 关于此问题,有什么方法可以将[文件从ASP.NET应用程序直接上传到Amazon S3并具有进度条? -—编辑---- 两天后,仍然没有直接的运气。发现了一件看起来很有前途但又不是免费的东西:http : //www.flajaxian.com/ 使用Flash通过进度条直接上传到S3。 问题答案: 我也在寻找解决方案。也许这会有所帮助, 来自AWS Dev Commnity, 但在许

  • 问题内容: 谁能解释我为什么不应该使用在窗口内直接绘制的方法,而应该在内部使用方法? 提前致谢。 问题答案: 三大原因… 顶层容器不是双缓冲的,在重新绘制框架时会导致闪烁,是的,您可以实现自己的双缓冲,但是… 在框架内绘画不会考虑框架边框,这意味着可以在框架边框下绘画。边框也取决于平台/外观,这意味着尺寸会发生变化 对于Swing窗口,窗口上已经存在一些组件,这意味着它们在大多数情况下都被覆盖(或

  • 问题内容: 我看到许多人试图将Android设备直接连接到SQL Server或MySql这样的数据库中,答案始终是相同的:使用Web服务。为什么不直接将Android设备与数据库连接?我的Android应用程序使用的是本地网络。 问题答案: 有很多原因。 安全性-如果用户具有直接访问权限,则他们可以从您的数据库中获取任何信息。另外,他们将在您的数据库中输入密码。因此,如果您使用的SQL Serv