I am trying to download an image from Android as an interface and django as a backend.
Model :
class Photo(models.Model): title = models.CharField(max_length=255,blank=True) photo = models.FileField(upload_to='photos') description = models.TextField(blank=True) uploaded = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) class Meta: db_table = 'media_photos' def __unicode__(self): return '%s' % self.title
URL representation url (r '^ photos / upload / $', 'upload_photo'):
def upload_photo(request): form=PhotoForm(request.POST,request.FILES) if request.method=='POST': if form.is_valid(): image = request.FILES['photo'] title1 ='' new_image = Photo(title=title1,photo=image,description='') new_image.save() response_data=[{"success": "1"}] return HttpResponse(simplejson.dumps(response_data), mimetype='application/json')
Now I am trying to access the view here from Android. So, now my Android side code is for uploading the image:
public void doFileUpload(String path){ HttpURLConnection conn = null; DataOutputStream dos = null; DataInputStream inStream = null; String lineEnd = "\r\n"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1*1024*1024; String urlString = "http://"; // server ip try { //------------------ CLIENT REQUEST FileInputStream fileInputStream = new FileInputStream(new File(path) ); // open a URL connection to the Servlet URL url = new URL(urlString); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); // Allow Inputs conn.setDoInput(true); // Allow Outputs conn.setDoOutput(true); // Don't use a cached copy. conn.setUseCaches(false); // Use a post method. conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+" "); dos = new DataOutputStream( conn.getOutputStream() ); dos.writeBytes(lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + path + "\"" + lineEnd); dos.writeBytes(lineEnd); // create a buffer of maximum size bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(lineEnd); // close streams Log.e("Debug","File is written"); fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { Log.e("Debug", "error: " + ex.getMessage(), ex); } catch (IOException ioe) { Log.e("Debug", "error: " + ioe.getMessage(), ioe); } //------------------ read the SERVER RESPONSE try { inStream = new DataInputStream ( conn.getInputStream() ); String str; while (( str = inStream.readLine()) != null) { Log.e("Debug","Server Response "+str); } inStream.close(); } catch (IOException ioex){ Log.e("Debug", "error: " + ioex.getMessage(), ioex); } } }
but this gives me an error:
E/Debug(590): error: java.net.URISyntaxException: Authority expected at index 7: http://