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

使用java将文件上载到skydrive

微生善
2023-03-14

根据SkyDrive api(http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files),我在帖子请求的正文中以字节[]传递图像的内容。文件创建发生在skyDrive服务器上,但当我在skyDrive中打开它时,它说“文件应用程序被损坏或损坏”。

请求的正文

--A300x内容处理:表单数据;name=“file”;filename=“menu icon.png”内容类型:应用程序/八位字节流

    [B@11f3043

--A300x--

来自服务器的响应。

<html>
  <head>
    <script type="text/javascript">
      window.location = "http://localtesting.com/mywebapp-1.0-SNAPSHOT#state=000000004C0FA618&result=%7b%22id%22%3a%22file.918bb0fbaf82f760.918BB0FBAF82F760!139%22%2c%22name%22%3a%22menu-icon.png%22%2c%22source%22%3a%22https%3a%2f%2f1m61va.tuk.livefilestore.com%2fy2mhncDTiOhUVFZxp08gi3yAFhp7OQ2-UYuQhnC_Obpoo4q5tG6onLuJz2mLJkJh6lUW5l8Cq2KBxvrLRrZ0bk6V7xmfso47cJWAw1fKE8bFJw%2fmenu-icon.png%3fdownload%26psid%3d1%22%7d";
    </script>
  </head>
</html>

将图像转换为字节的代码[]

字节[]图像=FileUtils。readFileToByteArray(物理文件);

有线索吗?

编辑:以下是我使用的代码片段

我从属性文件中取了一些零件。

env.properties
part1=--A300x\u000d\u000aContent-Disposition: form-data; name=\"file\"; filename=\"
part2=\"\u000d\u000aContent-Type: application/octet-stream\u000d\u000a\u000d\u000a        
part3=\u000d\u000a--A300x--

java file

String part1=bundle.getString("part1");
String part2= fileName+bundle.getString("part2");
String part3=bundle.getString("part3");

byte[] imageByteArray=FileUtils.readFileToByteArray(physicalfile);

PostMethod postMethod= new PostMethod("https://apis.live.net/v5.0/"+folderPath+"/files?state="+getSkydriveClientId()+"&redirect_uri="+baseURL+"&access_token="+getAcessToken());
postMethod.setRequestHeader("Content-Type","multipart/form-data; boundary=A300x");
postMethod.setRequestBody(part1+part2+imageByteArray+part3);

HttpClient httpClient=new HttpClient();
httpClient.executeMethod(postMethod);

共有2个答案

陈成济
2023-03-14

在修剪客户端id和base URL中的空格后,让它与以下代码片段一起工作。

  String BOUNDARY_STRING="A300x";
        String urlString="https://apis.live.net/v5.0/"+folderPath+"/files?state="+getSkydriveClientId()+"&redirect_uri="+baseURL+"&access_token="+getAcessToken();
        URL connectURL = new URL(urlString);        
        HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection(); 
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY_STRING);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.connect();
        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes("--" + BOUNDARY_STRING + "\r\n"); 
        dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileName + "\"\r\n");
        dos.writeBytes("Content-Type: application/octet-stream\r\n");
        dos.writeBytes("\r\n");
        File fileToUpload=Util.getFile(fileName);
        FileInputStream fileInputStream = new FileInputStream(fileToUpload);
        int fileSize = fileInputStream.available();
        int maxBufferSize = 8192;
        int bufferSize = Math.min(fileSize, maxBufferSize);
        byte[] buffer = new byte[bufferSize];
        int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0) {           
        dos.write(buffer, 0, bytesRead);  
        int bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, buffer.length);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        fileInputStream.close();         
        dos.writeBytes("\r\n");
        dos.writeBytes("--" + BOUNDARY_STRING + "--\r\n");
        dos.flush();
齐胜涝
2023-03-14

您似乎正在对字节数组调用toString()——这就是将其转换为[B@11f3043。您还没有向我们展示任何用于发出请求的代码,但基本上您需要避免调用toString()。我不知道API是否接受字节[],但您至少应该尝试找到一种接受字节[]的方法,因为这将适合您的内容。

编辑:查看示例代码,似乎可以将InputStream传递到LiveConnectClient。uploadAsync——所以只需将字节[]包装在字节流中即可。

 类似资料:
  • 我尝试使用C#将文件上传到FTP服务器。文件已上传,但字节为零。

  • 我在尝试将文件上传到我的S3存储桶时遇到了问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 sdk从nodejs上传到s3。 以下是我的路线设置: 这是个项目。upload()函数: 将“Body”参数设置为类似“hello”的字符串可以正常工作。根据doc,Body必须获取(Buffer、类型化数组、Blob、String、ReadableStream)对象数据。但是,上

  • 我正在尝试上传一个文本文件(也尝试了PDF等)到Salesforce。文本文件包含“Hello World”。 这是我正在使用的代码 这将导致以下看起来符合Salesforce指导原则的请求正文:https://developer.Salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_bl

  • 问题内容: 我正在使用Java创建一些大文件(数据库导出),并且需要将它们放在SharePoint服务器上的某个位置。现在,我正在使用IE进行此操作,但我也想自动执行此步骤。 我在网上搜索,发现了一些使用SOAP的提示,但是我还没有真正了解所有这些。有人可以为我提供一些示例代码或食谱吗? 请注意:SharePoint服务器要求NT域身份验证。我什至无法使用Firefox登录:( 编辑 如何将IE中

  • 我正在使用wget命令将文件上载到http。 这是我的错误消息: `FOLDER\u NAME'解析示例。网络。。。我连接到示例。净值| 10.00.00.009 |:80。。。有联系的。HTTP请求已发送,正在等待响应。。。401连接示例时拒绝访问。净值| 10.00.00.009 |:80。。。有联系的。HTTP请求已发送,正在等待响应。。。500内部服务器错误 请帮助解决此错误。 注意:服务

  • httpclient,HttpTime 4.1.3 我试图通过http将文件上载到远程服务器,但没有成功。 这是我的代码: 服务器是Solr。 这是为了替换像这样调用的工作bash脚本, <代码>卷曲http://localhost:8080/solr/update/extract?literal.id=bububu 如果我尝试设置“内容类型”“多部分/表单数据”,接收部分会说没有边界(这是真的)