반응형
http를 사용하여 모바일 장치에서 서버로 Android 파일을 보내려면 어떻게합니까?
Android에서 http를 사용하여 모바일 장치에서 서버로 파일 (데이터)을 보내려면 어떻게해야합니까?
간단합니다. Post 요청을 사용하고 파일을 바이너리 (바이트 배열)로 제출할 수 있습니다.
String url = "http://yourserver";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),
"yourfile");
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
InputStreamEntity reqEntity = new InputStreamEntity(
new FileInputStream(file), -1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true); // Send in multiple parts if needed
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
//Do something with response...
} catch (Exception e) {
// show error
}
이는 서버에 대한 HTTP Post 요청으로 수행 할 수 있습니다.
HttpClient http = AndroidHttpClient.newInstance("MyApp");
HttpPost method = new HttpPost("http://url-to-server");
method.setEntity(new FileEntity(new File("path-to-file"), "application/octet-stream"));
HttpResponse response = http.execute(method);
가장 효과적인 방법은 android-async-http를 사용하는 것입니다.
이 코드를 사용하여 파일을 업로드 할 수 있습니다.
// gather your request parameters
File myFile = new File("/path/to/file.png");
RequestParams params = new RequestParams();
try {
params.put("profile_picture", myFile);
} catch(FileNotFoundException e) {}
// send request
AsyncHttpClient client = new AsyncHttpClient();
client.post(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] bytes) {
// handle success response
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] bytes, Throwable throwable) {
// handle failure response
}
});
이 코드를 기본 활동에 직접 넣을 수 있으며 백그라운드 작업을 명시 적으로 만들 필요가 없습니다. AsyncHttp가 알아서 처리합니다!
스레딩 오류를 방지하기 위해 모든 것을 비동기 작업으로 래핑합니다.
public class AsyncHttpPostTask extends AsyncTask<File, Void, String> {
private static final String TAG = AsyncHttpPostTask.class.getSimpleName();
private String server;
public AsyncHttpPostTask(final String server) {
this.server = server;
}
@Override
protected String doInBackground(File... params) {
Log.d(TAG, "doInBackground");
HttpClient http = AndroidHttpClient.newInstance("MyApp");
HttpPost method = new HttpPost(this.server);
method.setEntity(new FileEntity(params[0], "text/plain"));
try {
HttpResponse response = http.execute(method);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
final StringBuilder out = new StringBuilder();
String line;
try {
while ((line = rd.readLine()) != null) {
out.append(line);
}
} catch (Exception e) {}
// wr.close();
try {
rd.close();
} catch (IOException e) {
e.printStackTrace();
}
// final String serverResponse = slurp(is);
Log.d(TAG, "serverResponse: " + out.toString());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
가장 효과적인 방법은 org.apache.http.entity.mime.MultipartEntity;
다음을 사용 하여 링크 에서이 코드를 참조하십시오.org.apache.http.entity.mime.MultipartEntity;
public class SimplePostRequestTest3 {
/**
* @param args
*/
public static void main(String[] args) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:8080/HTTP_TEST_APP/index.jsp");
try {
FileBody bin = new FileBody(new File("C:/ABC.txt"));
StringBody comment = new StringBody("BETHECODER HttpClient Tutorials");
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("fileup0", bin);
reqEntity.addPart("fileup1", comment);
reqEntity.addPart("ONE", new StringBody("11111111"));
reqEntity.addPart("TWO", new StringBody("222222222"));
httppost.setEntity(reqEntity);
System.out.println("Requesting : " + httppost.getRequestLine());
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
System.out.println("responseBody : " + responseBody);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.getConnectionManager().shutdown();
}
}
}
추가 :
반응형
'IT TIP' 카테고리의 다른 글
컴파일러가 "missing initializer"라는 경고를 던지는 이유는 무엇입니까? (0) | 2020.11.04 |
---|---|
gemset의 이름을 어떻게 바꾸나요? (0) | 2020.11.04 |
"그룹 별"카운트의 "순서"결과? (0) | 2020.11.04 |
엔터티에서 Enum을 사용할 때 쿼리 작성 문제 (0) | 2020.11.04 |
앵커 태그 대상 속성에서 _self, _top 및 _parent의 차이점 (0) | 2020.11.04 |