SORU
28 Mayıs 2013, Salı


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
29 Mayıs 2013, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Moodle

    Moodle

    11 Mayıs 2010
  • SPBedition

    SPBedition

    24 HAZİRAN 2013