Я пытаюсь загрузить файл изображения и аудиофайл с Android на Php-сервер одновременно, это способ загрузки на стороне Android:Android не удалось загрузить несколько типов файлов на сервер PHP
public String postFile(File image,File audio) throws Exception {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(uploadUrl);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fbImage = new FileBody(image);
FileBody fbAudio = new FileBody(audio);
builder.addPart("image", fbImage);
builder.addPart("audio", fbAudio);
final HttpEntity yourEntity = builder.build();
class ProgressiveEntity implements HttpEntity {
@Override
public void consumeContent() throws IOException {
yourEntity.consumeContent();
}
@Override
public InputStream getContent() throws IOException,
IllegalStateException {
return yourEntity.getContent();
}
@Override
public Header getContentEncoding() {
return yourEntity.getContentEncoding();
}
@Override
public long getContentLength() {
return yourEntity.getContentLength();
}
@Override
public Header getContentType() {
return yourEntity.getContentType();
}
@Override
public boolean isChunked() {
return yourEntity.isChunked();
}
@Override
public boolean isRepeatable() {
return yourEntity.isRepeatable();
}
@Override
public boolean isStreaming() {
return yourEntity.isStreaming();
} // CONSIDER put a _real_ delegator into here!
@Override
public void writeTo(OutputStream outstream) throws IOException {
class ProxyOutputStream extends FilterOutputStream {
public ProxyOutputStream(OutputStream proxy) {
super(proxy);
}
public void write(int idx) throws IOException {
out.write(idx);
}
public void write(byte[] bts) throws IOException {
out.write(bts);
}
public void write(byte[] bts, int st, int end) throws IOException {
out.write(bts, st, end);
}
public void flush() throws IOException {
out.flush();
}
public void close() throws IOException {
out.close();
}
} // CONSIDER import this class (and risk more Jar File Hell)
class ProgressiveOutputStream extends ProxyOutputStream {
public ProgressiveOutputStream(OutputStream proxy) {
super(proxy);
}
public void write(byte[] bts, int st, int end) throws IOException {
// FIXME Put your progress bar stuff here!
out.write(bts, st, end);
if(end==bts.length-1){
dialog.dismiss();
Toast.makeText(TakePhotoActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
}
}
}
yourEntity.writeTo(new ProgressiveOutputStream(outstream));
}
};
ProgressiveEntity myEntity = new ProgressiveEntity();
post.setEntity(myEntity);
HttpResponse response = client.execute(post);
System.out.println("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU "+getContent(response));
return getContent(response);
}
public static String getContent(HttpResponse response) throws IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String body = "";
String content = "";
while ((body = rd.readLine()) != null)
{
content += body + "\n";
}
return content.trim();
}
И это Php часть:
<?php
$file_path = "uploads/";
$file_path = $file_path . basename($_FILES['image']['name']);
if(move_uploaded_file($_FILES['image']['tmp_name'], $file_path)) {
echo "image success";
} else{
echo "image fail";
}
$file_path = $file_path . basename($_FILES['audio']['name']);
if(move_uploaded_file($_FILES['audio']['tmp_name'], $file_path)) {
echo "audio success";
} else{
echo "audio fail";
}
?>
но на сервере я могу увидеть только звуковой файл, файл изображения не удалось загрузки, я также пытался загрузить два файла изображения, он работал, но когда один аудиофайл и один файл изображения, файл изображения обычно не работает, любые предложения об этом? Заранее спасибо.
Вы можете потреблять контент только сразу из объекта. Но у вас есть 'yourEntity.consumeContent();' и этот 'return yourEntity.getContent();' и больше. Поэтому я думаю, что поэтому excetchion – Raghunandan
@Raghunandan, он работал при загрузке только одного файла, но когда я пытался загрузить два одновременно, был загружен только один файл, BTW, код был из [здесь] (http: //stackoverflow.com/questions/18964288/upload-a-file-through-an-http-form-via-multipartentitybuilder-with-a-progress/19188010#19188010) –
i вы хотите параллельную загрузку, почему бы вам не использовать исполнителя? – Raghunandan