Restsharp: RestRequest.AddFile tidak berfungsi

Dibuat pada 1 Nov 2010  ·  13Komentar  ·  Sumber: restsharp/RestSharp

sepertinya menambahkan file ke RestRequest tidak berfungsi.

ResponseStatus disetel sebagai Kesalahan.

respon.Pesan kesalahan adalah "Byte yang akan ditulis ke aliran melebihi ukuran byte Panjang Konten yang ditentukan."

harus memperbarui panjang konten sebelum menulis ke aliran.

bug

Komentar yang paling membantu

Ini adalah solusi saya untuk mengatasi bug ini:

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

Semua 13 komentar

kemungkinan besar perubahan pada Content-Length untuk mengatasi .NET tidak diuji dengan file dan header tidak disetel dengan benar. terima kasih atas laporannya.

coba ini lagi dengan perubahan terbaru jonfuller dan beri tahu saya jika masih tidak berfungsi

saya percaya ini harus diselesaikan. silakan tes dan beri tahu jika tidak.

Masalah kembali.
Dalam versi 105.2.3 (stabil saat ini di nuget) dengan ukuran file ~3.5MB.

Setelah diturunkan ke 105.1.0 semuanya berfungsi dengan baik.

Ada posting serupa

Saya pikir ini terkait dengan bug lain #769 dan #742 biarkan saya memperbaikinya dan kita akan lihat apa yang terjadi. Sesuatu terjadi dengan panjang konten.

Ada berita tentang ini?

benjolan - sepertinya masih menjadi masalah

ya, saya juga punya masalah dengan ini, bahkan kembali ke 105.1.0 tidak membantu

Masih belum terpecahkan.

Saya mengalami masalah serupa dengan versi restsharp yang lebih baru
ketika menggunakan
req.AddFile("call[picture_attributes][file]", (s) => imageStream.CopyTo(s), GetRandomFileName("jpg"), "image/jpeg");

Ini tidak berfungsi di versi yang lebih baru

tetapi jika saya menggunakan
req.AddFile("call[picture_attributes][file]", imageStream.GetBytes(), GetRandomFileName("jpg"), "image/jpeg");

dengan

    public static byte[] GetBytes(this Stream s)
    {
        using (var ms = new MemoryStream())
        {
            s.CopyTo(ms);
            return ms.ToArray();
        }
    }

berhasil.

jadi menggunakan aliran dengan menggunakan imageStream.CopyTo tidak berfungsi saat mengirim byte[] berfungsi

Ini adalah solusi saya untuk mengatasi bug ini:

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

Apakah RestRequest.AddFile belum siap untuk .NET Core? Saya melihat ada arahan kompiler #if FRAMEWORK di sekitar metode AddFile pada antarmuka. Saya pikir solusi @bcabrera dapat bekerja untuk kasus penggunaan saya tetapi pengujian unit akan menjadi tantangan.

Belum ada versi untuk .NET Core. Lihat masalah terbuka untuk memantau kemajuan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat