根据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);
在修剪客户端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();
您似乎正在对字节数组调用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 如果我尝试设置“内容类型”“多部分/表单数据”,接收部分会说没有边界(这是真的)