java Play框架:使用WS将图像发布到imageshack
我正在尝试使用their API和Play Framework的WSRequest对象POST
将图像转换为imageshack
我的代码如下:
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”,或者您的帖子不是多部分/表单数据我>
我已尝试使用字节数组将文件作为参数发送:
params.put( "fileupload", Base64.encode( picture.asBytes ) )
但这也导致Imageshack做出同样的反应
这让我快发疯了。有人能指出我哪里出了问题,或者可能为我指出一个更好的解决方案的方向吗?谢谢
原因
经过一番研究,我发现我忽略了这个问题中的一些重要信息。。。。我正在我的应用程序中包括谷歌应用程序引擎模块
根据Play Framework Google Group,当使用GAE时,与将文件附加到WS请求相关联的代码实际上只是注释掉了。这就是它不起作用的原因。因此,没有为您抛出错误,也没有说明它为什么不起作用。。。你只需要解决它
我已经接受了@Gary的回答,因为这是使用WS将图像上传到imageshack的正确方法,只是在使用GAE时没有
# 1 楼答案
您未正确设置内容类型标题
与此相反:
试试这个:
# 2 楼答案
我认为您不需要直接指定内容类型或mime类型
我使用以下代码成功上传
我认为,当您将文件附加到请求时,它会自动决定它将是多部分/表单数据
这是我的整个控制器(API密钥除外)
这就是应用程序。配置文件
我没有做任何其他的改变。刚刚浏览到http://localhost:9000/Application.tryUpload,可以在游戏控制台上看到成功的XML