- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 java 中的其余 api 将文件上传到 skydrive。
这是我的代码:
public void UploadFile(File upfile) {
if (upload_loc == null) {
getUploadLocation();
}
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost post = new HttpPost(upload_loc + "?" + "access_token=" + access_token);
try {
MultipartEntity mpEntity = new MultipartEntity(null,"A300x",null);
ContentBody cbFile = new FileBody(upfile, "multipart/form-data");
mpEntity.addPart("file", cbFile);
post.setEntity(mpEntity);
System.out.println(post.toString());
HttpResponse response = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line2 = "";
while ((line2 = rd.readLine()) != null) {
System.out.println(line2);
}
} catch (IOException ex) {
Logger.getLogger(Onlab.class.getName()).log(Level.SEVERE, null, ex);
}
client.getConnectionManager().shutdown();
}
但是当我尝试运行它时,出现了这个错误:
{
"error": {
"code": "request_body_invalid",
"message": "The request entity body for multipart form-data POST isn't valid. The expected format is:\u000d\u000a--[boundary]\u000d\u000aContent-Disposition: form-data; name=\"file\"; filename=\"[FileName]\"\u000d\u000aContent-Type: application/octet-stream\u000d\u000a[CR][LF]\u000d\u000a[file contents]\u000d\u000a--[boundary]--[CR][LF]"
}
}
我最大的问题是我看不到请求本身。我找不到任何可用的 toString 方法。我试过这种强制边界格式,但我也用空构造函数试过。
我的文件现在是一个包含一些文本的 txt,我认为边界是主要问题,或者我应该配置更多参数。当我在 Debug模式下看到变量时,一切看起来都与 msdn 中的指南相同。
我是其他世界的新手,如果可能的话,我想保留这个 apache 库,其中包含简单易用的 HttpClient 和 HttpPost 类。
提前致谢,对不起我的英语。
编辑:好吧,经过长时间的 sleep 我决定尝试 PUT 方法而不是 POST。代码只需很少的更改即可正常工作:
public void UploadFile(File upfile) {
if (upload_loc == null) {
getUploadLocation();
}
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
String fname=upfile.getName();
HttpPut put= new HttpPut(upload_loc +"/"+fname+ "?" + "access_token=" + access_token);
try {
FileEntity reqEntity=new FileEntity(upfile);
put.setEntity(reqEntity);
HttpResponse response = client.execute(put);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line2 = "";
while ((line2 = rd.readLine()) != null) {
System.out.println(line2);
}
} catch (IOException ex) {
Logger.getLogger(Onlab.class.getName()).log(Level.SEVERE, null, ex);
}
client.getConnectionManager().shutdown();
}
但是第一个问题还没有答案。
最佳答案
两件事:
除非确实需要,否则不应使用重载的 MultipartEntity
构造函数。在这种情况下,您将字符集设置为 null,这可能不是一个好主意。另外,您的边界分隔符不够复杂。
您的文件正文内容类型应反射(reflect)正在上传的实际文件的内容。 `multipart-formdata 通常用于 HTML 表单数据,而不是文件。您应该将其更改为“text/plain”或“image/jpeg”,或任何反射(reflect)文件真实 MIME 类型的内容。
调试 REST 请求的一些很棒的工具 - REST Console (Chrome) , REST Client (Firefox) .
关于您收到的错误消息的一些快速注释,它实际上有相当多的细节。该服务需要为正在发送的文件部分设置以下参数:
您可以让 HTTP 客户端使用以下代码设置其中的大部分内容:
ContentBody cbFile = new FileBody(
upfile,
"yourFileNameHere",
"application/octet-stream",
"UTF-8");
关于Java skydrive rest文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236460/
是否应该在设备中安装 SkyDrive 应用程序,以便使用我的应用程序和 skydrive sdk (livesdk) 连接 skydrive。我已经尝试使用我的应用程序客户端 ID 在 sdk zi
我正在我的博客插件中自动嵌入文档。我可以将 excel 文件上传到 skydrive,但要嵌入该文档,我应该在 Skydrive 中手动处理该文件并获取嵌入 URL。通过 skydrive API 获
我尝试使用 java 中的其余 api 将文件上传到 skydrive。 这是我的代码: public void UploadFile(File upfile) { if (uploa
我需要从我的 WP7 应用程序备份数据到 Skydrive,这个文件是 xml 文件。我知道如何连接到 skydrive 以及如何在 skydrive 上创建文件夹: try { var fo
即将发布的 WP7 Mango 版本中是否有用于将文件上传到 skydrive 的官方 API? 如果是,我在哪里可以找到示例和 API 说明? 最佳答案 根据这个SO post : SkyDrive
如果我(手动)在 Onedrive/Skydrive 中共享文件,并在 HTML5 下载元素中使用其可共享链接(这是在 ASP.NET 项目中): string fileUrl = "https://
我正在尝试创建一个应用程序,该应用程序将通过 SkyDrive API 访问文件夹及其内容。 但我只能得到我的名字和照片。由于某种未知的原因,文件夹没有被描绘。 代码运行没有错误,只是没有输出。我真的
我正在尝试使用 JavaScript 在 SkyDrive 上创建一个新文件。 到目前为止,我所做的最接近的事情是创建一个文件,但没有任何内容。 function upload() {
我有什么 我有 WEB 应用程序在必须访问 SkyDrive 文件的浏览器中运行。我使用 WL.js 提供的漂亮界面来访问当前经过身份验证的用户的文件列表: function openFromS
我想这样做,如果可能的话,我想使用 Winform 应用程序访问我的 Skydrive。实际上,我想在任何地方访问我的某些内容,或者访问其他人也可以访问它们,但不喜欢在浏览器或 Windows 手机上
我有一个客户想使用 SkyDrive 作为网站的云存储。本网站不会要求网站用户提供他们的 SkyDrive 帐户以向他们展示他们的文件,但网站所有者会将一些文件存储在 SkyDrive 中并希望与用户
目前我正在使用 client.getAsync(folder + "/files", liveListener) 来检查特定文件的文件夹内容。目前它运行良好,但如果文件夹中有很多文件(很可能有),那么
我正在开发一个 iOS 应用程序,让用户可以访问他们的 OneDrive/SkyDrive,但我遇到了一个非常烦人的问题: 用户第一次将应用链接到他们的 OneDrive 时,一切都按预期进行: 他们
有谁知道如何从 Windows Phone 7 以编程方式访问 SkyDrive?我使用什么 API?我需要将文件从手机上传到 SkyDrive,反之亦然。 一些代码示例会很棒。 :-) 最佳答案 您
我在 Rails 应用程序中使用 Skydrive gem。 为了重命名我写的文件夹 def renaming_folder client = Skydrive::Client.new(@@acc
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
我在显示位于根目录内的文件夹的内容时遇到了真正的问题。它设法确定了 Files 目录中的文件夹,但是当我尝试对其中一个文件夹执行相同操作时,它不起作用。 我认为问题出在WL.api的路径名上。不过我可
更新我的应用程序后,我收到了来自认证测试的“警告”消息: The app and its associated metadata does not accurately represent its f
我正在尝试获取 SkyDrive 上登录用户的所有文件夹列表。 LiveOperationResult operationResult = await client.GetAsync("me/skyd
我正在编写一个 WP8(XAML 和 C#)应用程序来从 SkyDrive 读取一个文本文件并将其保存到 IsolatedStorage 中。 好像是读取了文件,但是我得到的数据是文件的描述,而不是文
我是一名优秀的程序员,十分优秀!