我正在测试一种使用改装库发送图像的方法。在此处的改装文件中:http://square.github.io/retrofit/有一种方法可以使用@MultiPart注释。我正在尝试像文档一样使用,但对我来说仍然不起作用。
我该怎么做?
我在努力。
Web服务php文件
if($_REQUEST["uploadfile"] == "add"){
$uploaddir = 'C:\Users\fernando\Pictures';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
$response = array();
//param
$response["nome"] = $_REQUEST["nome"];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
$response["msg"] = "O arquivo é valido e foi carregado com sucesso. Aqui esta alguma informação:\n";
print_r($_FILES);
} else {
$response["msg"] = "Possivel ataque de upload! Aqui esta alguma informação:\n";
print_r($_FILES);
}
$json = json_encode($response);
echo $json;
}
Usario的侦听器
public interface UsuarioListener {
//send an image with params with Post
@Multipart
@POST("/android/login.php")
void setUserImage(
@QueryMap Map<String, String> params,
@Part("pathImage") TypedFile file,
Callback<JsonElement> response);
}
活动
btnEnviar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setUserImage();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE &&
resultCode == RESULT_OK &&
null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
pathImage = cursor.getString(columnIndex);
cursor.close();
}
}
public void setUserImage() {
HashMap<String, String> params = new HashMap<String, String>();
params.put("nome", "Fernando Paiva Campos");
RestAdapter adapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(END_POINT).build();
UsuarioListener listener = adapter.create(UsuarioListener.class);
TypedFile image = new TypedFile("image/jpg", new File(pathImage));
listener.setUserImage(
params,
image,
new Callback<JsonElement>() {
@Override
public void success(JsonElement arg0, Response arg1) {
Log.i("JSON_ELEMENT:", arg0.toString() + "");
}
@Override
public void failure(RetrofitError arg0) {
Log.e("ERROR:", arg0.getLocalizedMessage());
}
});
}
例外
电子/错误:(5200):com.google.格森。JsonSyntaxException:com.google.格森。流动MalformedJsonException:使用JsonReader。setLenient(true)在第1行第6列接受格式错误的JSON
您的问题有两个更正:
在您的这段代码中:
public interface UsuarioListener {
//send an image with params with Post
@Multipart
@POST("/android/login.php")
void setUserImage(
@QueryMap Map<String, String> params,
// the @Part has the parameter "pathImage".
// You should pass this in your php code.
@Part("pathImage") TypedFile file,
Callback<JsonElement> response);
}
因此,您的php代码应该如下所示:
if($_REQUEST["uploadfile"] == "add"){
$uploaddir = 'C:\Users\fernando\Pictures';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
$response = array();
//param
$response["nome"] = $_REQUEST["nome"];
if (move_uploaded_file($_FILES['pathImage']['tmp_name'], $uploaddir . $_FILES['pathImage']['name']))
改装客户端中的最终更正:
TypedFile typedImage = new TypedFile("application/octet-stream", photo);
有关详细信息,您可以在我的回答中加入类似问题的loon:改装多部分上载图像失败
上面提到的错误似乎与php输出有关。上载是否成功尚不清楚,但您的响应是无效的JSON,因为在您回显JSON响应之前,您还需要打印出$\u文件的值。尝试在php文件中使用以下代码注释这些行。
print_r($_FILES);
在这里,我将字段数据与FormUrlEncoded一起使用,但我必须在相同的API部分(“user\u image”)RequestBody文件中与多部分一起使用这两种数据。这怎么可能?提前谢谢。
如何发送带有文件的php电子邮件 Antrag=图像文件 我所尝试的 输出电子邮件: 控制器 看法
我正在尝试使用Reform2将图像上载到服务器,但不确定如何执行。 文档让我有点困惑,我尝试了这里提到的解决方案,但它对我不起作用。 这是我当前使用的代码片段,它不会向服务器发送任何内容: 然而,我可以通过使用TypedFile对1.9进行改装来很好地做到这一点。 是我做错了什么还是Retrofit2对这种事情有什么问题?
我想发一个带有改装2的帖子。url有一些参数: url如下所示 www.website.com/server/directory/location。type?arg1=value1&arg2=value2 我被要求使用POST请求。值(value1和value2)在运行时是动态的。我使用HttpClient用Xamarin开始了这个项目,现在我正在用Java原生语言重写它。在C#中,我所要做的就是
我试图使用Android Volley库发送JSON Post请求,但我似乎没有得到json的正文,我在我的Web服务器上得到未定义的正文参数。我需要json的参数体是一个单一的对象"name=某些Val } 我也在上面的代码中尝试了这一点,但没有成功:
问题内容: 根据带有凭据的请求,Firefox仅在以下情况下发送凭据以及跨域帖子: 设置了…但是看来jQuery的Ajax API似乎没有为此提供任何机制。 有什么我想念的吗?我还有其他方法可以做到吗? 问题答案: 功能应该在jQuery 1.5中被破坏。 从jQuery 1.5.1开始,您应该使用xhrFields参数。 文件:http://api.jquery.com/jQuery.ajax/