gpt4 book ai didi

java - Play Framework : Post image to imageshack using WS

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:40 25 4
gpt4 key购买 nike

我正在尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com