- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 their API 将图像POST
到 imageshack|和 Play Framework 的 WSRequest对象。
我的代码如下:
public static void upload( Picture picture ) throws Exception {
//set file parameter - in this case the image
WS.FileParam fp = new WS.FileParam( picture.asFile, "fileupload");
//set other parameters
Map<String,Object> params = new HashMap<String, Object>();
params.put( "optsize", "resample" );
params.put( "rembar", "yes" );
params.put( "public", "no" );
params.put( "a_username", username );
params.put( "a_password", password );
params.put( "key", a_key );
//POST request
Document doc = WS.url( "http://www.imageshack.us/upload_api.php" )
.setHeader( "Content-Type", picture.contentType )
.mimeType( "multipart/form-data" )
.params( params )
.files( fp )
.post()
.getXml();
}
但是,我总是收到 imageshack 的以下响应:
抱歉,我们检测到收到了意外数据。缺少必需参数“fileupload”或您的帖子不是 multipart/form-data。
我尝试使用字节数组将文件作为参数发送:
params.put( "fileupload", Base64.encode( picture.asBytes ) )
但这也会导致来自 Imageshack 的相同响应。
这让我发疯。任何人都可以指出我出错的地方或者可能指出我更好的解决方案的方向吗?谢谢。
经过一些研究,我发现我忽略了这个问题中的一些重要信息......我在我的应用程序中包含了 Google App Engine 模块。
根据Play Framework Google Group使用 GAE 时与将文件附加到 WS 请求相关联的代码实际上只是被注释掉了。这就是它不起作用的原因。因此,不会为您抛出任何错误,也不会说明为什么它不起作用...您只需要解决它。
我接受了@Gary 的回答,因为这是使用 WS 将图像上传到 imageshack 的正确方法——只是在使用 GAE 时不是这样。
最佳答案
我认为您不需要直接指定内容类型或 MIME 类型。
我使用下面的代码上传成功。
WS.FileParam fp = new WS.FileParam(
new File("d:\\workspace\\ImageShackTest\\sample_picture.png"), "fileupload");
Map<String,Object> params = new HashMap<String, Object>();
params.put( "optsize", "resample" );
params.put( "rembar", "yes" );
params.put( "public", "yes" );
//params.put( "a_username", username );
//params.put( "a_password", password );
params.put( "key", API_KEY );
//POST request
Document doc = WS.url( "http://www.imageshack.us/upload_api.php" )
.params( params )
.files( fp )
.post()
.getXml();
我认为当您将文件附加到请求时,它会自动决定它是 multipart/form-data。
这是我的整个 Controller (API key 除外)
package controllers;
import play.*;
import play.mvc.*;
import java.util.*;
import models.*;
import play.libs.*;
import java.io.File;
public class Application extends Controller {
public static void index() { render(); }
private static final String API_KEY = "API KEY REMOVED TO PROTECT THE INNOCENT";
public static void tryUpload() {
WS.FileParam fp = new WS.FileParam( new File("d:\\workspace\\ImageShackTest\\sample_picture.png"), "fileupload");
Map<String,Object> params = new HashMap<String, Object>();
params.put( "optsize", "resample" );
params.put( "rembar", "yes" );
params.put( "public", "yes" );
params.put( "key", API_KEY );
String doc = WS.url( "http://www.imageshack.us/upload_api.php" )
.params( params )
.files( fp )
.post()
.getString();
System.out.println(doc);
index();
}
}
这是 application.conf 文件
# This is the main configuration file for the application.
# ~~~~~
application.name=ImageShackTest
application.mode=dev
%prod.application.mode=prod
application.secret=JIVQE8y3y1lCzXRGprFJvoXBdi8Jpa8qE1U1mBIooLLOOYk5yyhAI5cxbEf4q4pl
date.format=yyyy-MM-dd
attachments.path=data/attachments
mail.smtp=mock
我没有做任何其他更改。刚刚浏览到 http://localhost:9000/Application.tryUpload并且可以在 Play 控制台上看到成功的 XML。
关于java - Play Framework : Post image to imageshack using WS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8703041/
我正在开发一个安卓应用。在这个应用程序中需要使用他们的 api 将图像上传到 imageShack 网站。 这里“sourceFileUri”是来自设备sdcard的图片文件路径,显示Outh或dev
将主题从 Google 群组移至此处,以便可以帮助提问者。 imageshack API:http://api.imageshack.us/ 最终的http请求返回json: {"success":t
我正在使用 Alamofire、AlamofireImage 使用 ImageShack 存储和 Firebase 后端来缓存图像。有时内存超过 100MB。我想了解如何在上传前改进我的图像缓存和缩放
我正在尝试使用他们的 API 将图片上传到 ImageShack : - (void)uploadImage2:(UIImage *)image { NSData *imageToUpload
我正在寻找一个类似于 Imageshack 或 photobucket 的图像托管网站,它不需要登录,支持从 Android 应用程序上传。我希望能够将特定照片上传到网络服务的代码写入我的应用程序,然
我正在尝试使用 their API 将图像POST 到 imageshack|和 Play Framework 的 WSRequest对象。 我的代码如下: public static void up
我在将文件上传到 Imageshack 的 API 时遇到了一些问题。我使用 multipart/form-data 表单来获取文件。 索引.php: 通常我对此没有问题,但是
我是一名优秀的程序员,十分优秀!