Sto tentando di caricare un file di immagine tramite il metodo http post dal dispositivo Android al server di rails. Ma pubblicare un'immagine non funziona. Più specificamente, il parametro post (incluso il file immagine) non sembra essere inviato correttamente.Caricamento di un'immagine da Android (con Android Asynchronous Http Client) al server di rails (con graffetta)
Sto usando Android Asynchronous Http Client (http://loopj.com/android-async-http/) per pubblicare un'immagine da Android, e il codice per postare l'immagine è come questo.
public static void postImage(){
RequestParams params = new RequestParams();
params.put("picture[name]","MyPictureName");
params.put("picture[image]",File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/CameraApp/test.jpg"));
AsyncHttpClient client = new AsyncHttpClient();
client.post("http://x.x.x.x:3000/pictures/", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
Log.w("async", "success!!!!");
}
});
}
Per quanto riguarda le rotaie graffetta applicazione, ho semplicemente usato scaffold e modello generato il nome di "immagini" e ha aggiunto file allegato graffetta su di esso. Modello e controller (che riceve la richiesta) è come sotto.
modello
class Picture < ActiveRecord::Base
attr_accessible :name, :image
has_attached_file :image,
:styles => { :original => "480x480>", :thumbnail => "100x100>" },
:path => ':rails_root/public/system/pictures/image/:id_partition/:style_:filename'
end
regolatore
# POST /pictures
# POST /pictures.json
def create
@picture = Picture.new(params[:picture])
respond_to do |format|
if @picture.save
format.html { redirect_to @picture, notice: 'Picture was successfully created.' }
format.json { render json: @picture, status: :created, location: @picture }
else
format.html { render action: "new" }
format.json { render json: @picture.errors, status: :unprocessable_entity }
end
end
end
Quando si riceve la richiesta, "guide del server" console dice qualcosa del tipo seguente
Started POST "/pictures/" for y.y.y.y at 2012-09-03 18:23:00 +0900
Processing by PicturesController#create as HTML
Parameters: {"picture"=>{"name"=>"PictureName"}}
(0.1ms) begin transaction
SQL (0.5ms) INSERT INTO "pictures" ("album_id", "created_at", "image_content_type", "image_file_name", "image_file_size", "image_updated_at", "name", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) [["album_id", nil], ["created_at", Mon, 03 Sep 2012 09:23:00 UTC +00:00], ["image_content_type", nil], ["image_file_name", nil], ["image_file_size", nil], ["image_updated_at", nil], ["name", "PictureName"], ["updated_at", Mon, 03 Sep 2012 09:23:00 UTC +00:00], ["user_id", nil]]
[paperclip] Saving attachments.
(11.0ms) commit transaction
Redirected to http://x.x.x.x:3000/pictures/10
Completed 302 Found in 15ms (ActiveRecord: 11.6ms)
Come si può vedere, c'è solo un paramater inviato e il parametro "immagine [immagine]" che non sono i dati di immagine grezza ricevuti. Qualcuno può aiutarmi?
Grazie. Stavo cercando una domanda simile. –
Ottengo {"stato": "Errore", "errore": {"image_content_type": ["non valido"], "immagine": ["non valido"]}}. Qualcuno ha avuto questo problema prima? –