Nasıl bir form-data” Voleybolu ile POST Android/“parçalı göndermek için
Herkes bunu gerçekleştirmek mümkün olmadı? Hiçbir başarı image/png bizim sunucuya bir POST isteği kullanarak yüklemek için çalışıyor ve eğer biri varsa merak ediyorum. Bunu yapmak için varsayılan yolu request.java Sınıf public byte[] getPostBody()
geçersiz kılar ve Dosya eklemek için, sınır için boş bir Başlık anahtarı olacağına inanıyorum. Ancak, Map<String, String> postParams
için bir Dize için benim dosya dönüştürme ve yeniden kodlanmış olan geniş ve çok zarif () benim girişimleri başarısız da çok değil gibi görünüyor. Bu gerçekten tek şey bizi bu kütüphane otomatik düzenliyor.
Her neyse, tüm düşünceler ve Cevaplar son derece takdir edilmektedir. Yardımlarınız için teşekkür ederim.
CEVAP
Bu konuda yanılıyor olabilirim ama kendi com uygulamak gerekir bence.android.Voleybolu.araç.Varsayılan olanları versiyonu >(HurlStack çünkü bu HttpStack Ya HttpClientStack Gingerbread) form-data parçalı/ile anlaşma yok.
Düzenleme:
Ve gerçekten de yanılmışım. Böyle İstekte MultipartEntity kullanarak bunu başardı:
public class MultipartRequest extends Request<String> {
private MultipartEntity entity = new MultipartEntity();
private static final String FILE_PART_NAME = "file";
private static final String STRING_PART_NAME = "text";
private final Response.Listener<String> mListener;
private final File mFilePart;
private final String mStringPart;
public MultipartRequest(String url, Response.ErrorListener errorListener, Response.Listener<String> listener, File file, String stringPart)
{
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
mStringPart = stringPart;
buildMultipartEntity();
}
private void buildMultipartEntity()
{
entity.addPart(FILE_PART_NAME, new FileBody(mFilePart));
try
{
entity.addPart(STRING_PART_NAME, new StringBody(mStringPart));
}
catch (UnsupportedEncodingException e)
{
VolleyLog.e("UnsupportedEncodingException");
}
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response)
{
return Response.success("Uploaded", getCacheEntry());
}
@Override
protected void deliverResponse(String response)
{
mListener.onResponse(response);
}
}
Ama bir resim ve basit bir dize ile denedim ve işe yarıyor bayağı. Yanıtı bir yer tutucudur, çok mantıklı bu durumda Yanıt bir Dize döndürmek için yapmaz. Sorunları apache httpmime https://code.google.com/p/httpclientandroidlib/ Eğer daha iyi bir yolu varsa bilmiyorum bu kullandım MultipartEntity kullanmak zorundaydım. Umarım yardımcı olur.
Edit
Httpclientandroidlib kullanmadan httpmime, sadece bağımlılık httpcore kullanabilirsiniz.
Ruby: parçalı olarak HTTP üzerinden bi...
Nasıl bir Niyet kullanarak bir Android...
Nasıl bir form PhantomJS kullanarak gö...
Nasıl bir JSON nesnesi göndermek için ...
Nasıl JSON POST isteği HTTPClient kull...