首页 文章

从Java应用程序将文件上载到OneDrive

提问于
浏览
0

我正在尝试使用Java应用程序将文件上传到OneDrive,并且我对这个过程有点挣扎 . 我认为我的主要问题是我没有像微软定义的那样获得驱动和文件夹概念 . 所以我无法看到要上传到的URL .

现在,只要将文件上传到我自己的OneDrive文件夹,每当我登录公司的“Sharepoint”网站时,我都会欣喜若狂 . 所以这不是个人OneDrive上传 . 最终,虽然我需要能够构建一个URL,指向要求存放文件的任何文件夹 .

搜索WEB(和Stackoverflow)我发现人们指定了两种不同类型的URL来上传文件 .

我一直得到401或404错误 . 现在401是授权错误,所以我认为这是一个URL问题 . 好吧,因为我创建了应用程序并自己赋予了ReadWrite权限 . 我使用此应用程序中的秘密来获取可行的AccessKey . 所以我的猜测是我访问了一个不正确的文件夹,即不是我的,而是其他人的,因此我收到了401消息 .

我没有提出Java代码,因为我甚至无法在Postman中使用它 . 所以,如果我遗漏了任何东西,请告诉我 .

谢谢大家提前

1 回答

  • 0

    根据One Drive API documentation,可以使用以下3种方法将文件上传到One Drive个人:

    • Simple Upload: (当然要对要上传的文件大小有一些限制)

    我们只需要将文件名作为路径参数传递给url,将实际文件作为二进制附件传递给body .

    file name with extension as a path parameter

    request body as a binary attachment

    你完成了简单的上传 .

    Note: 如果要将文件上载到根目录以外的目录,则可以在URL中提及特定目录的ID而不是"root" .

    • Multipart Upload: (此策略对要上载的文件也有大小限制)只有在单个api调用中上载文件内容文件元数据时才应采用此方法 .

    Request url and headers for multipart upload on One Drive

    Request body payload for multipart upload on One Drive

    这对我不起作用,因为基础64编码的有效负载在没有在一个驱动器服务器上解码的情况下被上载,上载的文件是不可预览的 . 好像一个驱动器忽略了Content-Encoding-Scheme标头(可能是一个bug),或者根本不支持 . :(

    如果你能解决它,请告诉我 .

    有效载荷中的内容正在被正确地上传,但由于它忽略了媒体文件的内容编码方案,内容被上传为基本64编码内容,这在一个驱动器中是不可预览的 .

    请按照以下链接了解有关此问题的更多信息:

    Stackoverflow

    Microsoft forum

    • Session Upload (For large files): 在这里,您需要创建一个上传会话,然后以数据块的形式将数据上传到创建的会话 . 有关更多详细信息,请访问此链接Session Upload .

    Creating upload session

    Uploading data to created session in chunks

    并将文件附加为二进制附件 .

    这完全适用于POSTMAN客户端 .

    如果您希望上传相同的java代码,可以使用以下示例代码:Sample upload application

    @RequestMapping(value="/upload", method=RequestMethod.POST, consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        File convertFile = new File("FileDirectoryPath"+file.getOriginalFilename());
        //convertFile.createNewFile();
        FileOutputStream fos = new FileOutputStream(convertFile);
        fos.write(file.getBytes());
        fos.close();
        return new ResponseEntity<>("file uploaded successfully", HttpStatus.OK);
    }
    

相关问题