我正在開發一個與Django後端接口的Android應用程序。我已經使用mod_wsgi部署了webservice,並且有很多web服務調用可以工作並且已經過測試,所以我知道所有的東西都應該可以工作。所有其他通話都可以正常工作。這是我在Android中撥打照片的方法。使用Android將文件上傳到Django Web服務
public static String uploadFile(String url, int server_id, String filepath) {
try {
client.getParams().setParameter("http.socket.timeout", 90000); // 90 second
HttpPost post = new HttpPost(url);
MultipartEntity mpEntity = new MultipartEntity();
mpEntity.addPart("image", new FileBody(new File(filepath), "image/jpeg"));
post.setEntity(mpEntity);
post.addHeader("server_id", String.valueOf(server_id));
HttpResponse response = Connector.client.execute(post);
if (response.getStatusLine().getStatusCode() != 200) { return "false"; }
return convertStreamToString(response.getEntity().getContent());
} catch (Exception e) {
if (Constants.DEBUG) e.printStackTrace();
return "false";
}
}
這是我用我的views.py文件,以接收和處理圖像的方法:
@csrf_exempt
def incident_upload(request):
if request.method == 'POST':
server_id = request.POST['server_id']
incident = get_object_or_404(Incident, pk=server_id)
imagePath = '/Library/WebServer/program/uploads/' + str(int(time.time() * 1000)) + '.jpg'
destination = open(imagePath, 'wb+')
for chunk in request.FILES['image'].chunks():
destination.write(chunk)
destination.close()
incident.ImagePath = imagePath
incident.save()
return render_to_response('webservice/incident_read.html', {'incident': incident, 'device': incident.device})
當我嘗試這個方法,我得到了真正有用的Apache的錯誤500內部服務器錯誤,我不知道發生了什麼。我知道這種方法可行,因爲我可以使用自定義的HTML頁面,我寫打沒有Android的Web服務,它工作正常:
<html>
<body>
<form action="http://xxxxxxxxxxx.local/hermes/incident/upload/" enctype="multipart/form-data" method="post">
server_id: <input type="text" name="server_id" />
<br />
file: <input type="file" name="image" />
<br />
<input type="submit" value="send" />
</form>
</body>
</html>
因此,我認爲必須有一些錯誤我如何格式化在Android端調用。我會提供一個錯誤日誌或堆棧跟蹤,但沒有任何。我正在看我的Apache錯誤日誌,什麼也沒有顯示。任何人有任何建議?
編輯: 因此,我設置了django日誌記錄,並且能夠在我從手機中打開時調試我的上傳方法。當我說server_id = request.POST ['server_id']時,它似乎停止工作,所以不知何故,當我在uploadFile方法中發出請求時,那部分數據沒有正確設置。任何人都看到我不正確地處理請求?
Apache錯誤日誌說什麼? –
沒什麼!大聲笑它沒有任何幫助!當我設置mod_wsgi時,它有錯誤,我可以找到並修復,但沒有顯示這個錯誤 – Josh
我在想也許這個問題可能與你的內容類型頭,但你發送一個表單。 –