Tôi vừa mới bắt đầu phát triển các dịch vụ REST, nhưng tôi đã gặp phải một tình huống khó khăn: gửi các tệp từ dịch vụ REST tới khách hàng của tôi. Cho đến nay, tôi đã hiểu về cách gửi các kiểu dữ liệu đơn giản (chuỗi, số nguyên, v.v.) nhưng gửi một tệp lại là một vấn đề khác vì có rất nhiều định dạng tệp mà tôi không biết mình nên bắt đầu từ đâu. Dịch vụ REST của tôi được tạo trên Java và tôi đang sử dụng Jersey, tôi đang gửi tất cả dữ liệu bằng định dạng JSON.
Tôi đã đọc về mã hóa base64, một số người nói rằng đó là một kỹ thuật tốt, những người khác nói rằng đó không phải là do vấn đề kích thước tệp. Cách chính xác là gì? Đây là cách một lớp tài nguyên đơn giản trong dự án của tôi đang tìm kiếm:
import java.sql.SQLException;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import com.mx.ipn.escom.testerRest.dao.TemaDao;
import com.mx.ipn.escom.testerRest.modelo.Tema;
@Path("/temas")
public class TemaResource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Tema> getTemas() throws SQLException{
TemaDao temaDao = new TemaDao();
List<Tema> temas=temaDao.getTemas();
temaDao.terminarSesion();
return temas;
}
}
Tôi đoán mã để gửi một tệp sẽ giống như sau:
import java.sql.SQLException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/resourceFiles")
public class FileResource {
@GET
@Produces({application/x-octet-stream})
public File getFiles() throws SQLException{ //I'm not really sure what kind of data type I should return
// Code for encoding the file or just send it in a data stream, I really don't know what should be done here
return file;
}
}
Tôi nên sử dụng loại chú thích nào? Tôi đã thấy một số người giới thiệu để @GET
sử dụng @Produces({application/x-octet-stream})
, đó có phải là cách chính xác? Các tệp tôi đang gửi là những tệp cụ thể nên khách hàng không cần phải duyệt qua các tệp. Bất cứ ai có thể hướng dẫn tôi cách tôi phải gửi tệp? Tôi có nên mã hóa nó bằng base64 để gửi nó dưới dạng một đối tượng JSON không? hoặc mã hóa không cần thiết để gửi nó như một đối tượng JSON? Cảm ơn vì bất kỳ sự giúp đỡ nào bạn có thể đưa ra.
java.io.File
(hoặc đường dẫn tệp) trên máy chủ của mình không hay dữ liệu đến từ một số nguồn khác, như cơ sở dữ liệu, dịch vụ web, lệnh gọi phương thức trả về mộtInputStream
?