您好我正在尝试将文件上传到服务器。其完成方式如下: 1. 通过调用 JSON url 获取上传 url 2. 上传到 uploadUrl 3. 获取响应
api调用的文档:
/file/uploadUrl
{ error: "", uploadUrl: <string>, progressUrl: <string> }
The returned URL is valid for a limited amount of time, you need to request a new one for each upload.
Issue a POST request to the "uploadUrl" to upload the file. You can poll "progressUrl" to fetch the current progress.
The POST request needs to be multipart/form-data encoded and contain a "file" field.
cUrl example: curl -F "file=@somefile.rar" "http://s6.baycdn.com/upload/93b37e57/4e691e0c/6/0?X-Progress-ID=4e639fcd34CC2F73796CF81679C605643A8F99CF"
Note: in order to upload a file to your account, you need to first log in using /account/login and then append ?session=XYZ to /file/uploadUrl
On success, the "uploadUrl" will respond with an object:
{ error: "", fileId: <string>, size: <int>, sha1: <string>, infoToken: <string>, deleteToken: <string>, linksUrl: <string>, downloadUrl: <string>, deleteUrl: <string>, }
我拥有的代码:(onClick)
case R.id.upload:
asyncTask = new JsonAsync();
asyncTask.setJsonListener(new JsonListener() {
public void onObjectReturn(JSONObject object) {
handleJsonObject(object);
}
});
asyncTask.execute("http://api.bayfiles.net/v1/file/uploadUrl?session=" + sessionId);
return true;
处理Json对象:
private void handleJsonObject(JSONObject object) {
try {
sUpload = object.getString("uploadUrl");
HttpClient httpclient = new DefaultHttpClient();
//post request to send the video
File sdCardRoot = Environment.getExternalStorageDirectory();
File myDir = new File(sdCardRoot, "Download");
HttpPost httppost = new HttpPost(sUpload);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy( policy);
FileBody video_file1 = new FileBody(new File(myDir + "/test.txt"));
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("file=@test.txt", video_file1);
httppost.setEntity(reqEntity);
// DEBUG
System.out.println( "executing request " + httppost.getRequestLine( ) );
HttpResponse response = null;
try {
response = httpclient.execute( httppost );
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpEntity resEntity = response.getEntity( );
// DEBUG
System.out.println( response.getStatusLine( ) );
if (resEntity != null) {
try {
System.out.println( EntityUtils.toString( resEntity ) );
} catch (org.apache.http.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // end if
if (resEntity != null) {
try {
resEntity.consumeContent( );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // end if
httpclient.getConnectionManager( ).shutdown( );
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data: " + e.toString());
Crouton.makeText(this, "Something went wrong!", Style.ALERT).show();
}
}
我从服务器(JSON)得到的错误是:{“错误”:“文件创建失败”}
和日志猫:
10-14 13:17:29.954: I/System.out(22705): executing request POST http://s5.baycdn.com/upload/199808fb/52615115/7/2084659?X-Progress-ID=525bd2d5566FC893A0505FABB493A4215C7EC3AF HTTP/1.1
10-14 13:17:31.125: I/System.out(22705): HTTP/1.1 200 OK
10-14 13:17:31.125: I/System.out(22705): {"error":"file creation failed"}